Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/12/2022, à 01:40

dva2tlse

[RÉSOLU] SEGFAULT trop précoce

Bonsoir et salut les (X)Ubunteros,
je suis en train de faire des essais avec un programme en fortran que j'ai écrit; il me plante une SEGFAULT après N'avoir lu QUE 10700 entiers(codés sur huit octets, il est vrai) alors que je suis parti pour bien plus.
J'ai essayé "ulimit -s unlimited", mais ça change rien,
Alors que faire ?
  David

Dernière modification par dva2tlse (Le 05/12/2022, à 14:21)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#2 Le 01/12/2022, à 08:46

pingouinux

Re : [RÉSOLU] SEGFAULT trop précoce

Bonjour,
Peux-tu élaguer le programme en ne gardant que le minimum pour produire l'erreur, et nous le montrer ainsi que la commande de compilation ?

Hors ligne

#3 Le 01/12/2022, à 19:08

dva2tlse

Re : [RÉSOLU] SEGFAULT trop précoce

Bonjour pingouinux, (ici chez ubuntu)
je suis super-content d'avoir vos réponses ce midi (deux gars chez développez.com; https://www.developpez.net/forums/d2142 … t11898700); l'heure à laquelle vous les avez postées me rappelle l'époque où je bossais et où j'allais voir sur les forums pendant que le café coulait, vers cette heure là aussi, ou même encore plus tôt parfois.

  Bon alors maintenant, des réponses :
-1°) la compil' : j'utilise un scriptPourBuildersqBI (sqBI est le nom du programme).
sPBsqqBI:

 #!/bin/sh
# scriptPourBuildersqBI=sPBsqBI dans $HOME/FORTRAN/FPRM
rm *.o commod.mod
gfortran -c commod.f
gfortran -c sqBI.f
gfortran sqBI.o commod.o -fbounds-check -fdefault-integer-8 -std=f2018 -fno-backtrace -fcheck=all -o sqBI
./sqBI

Vous voyez qu'il y a bien toutes les options qui permettent de corriger une SEGFAULT "facile", mais celle-là a l'air "costaude".

-2°) OS: Xubuntu 22.04 dans un PC assemblé. compilo' : gfortran comme vu plus haut

-4°) But du prgm : Euler project #3, stocker des drapeaux disant si un nombre, jusqu'à entre 7 et 8 milliards, est premier ou pas.

c BI=600851475143
c
c six cents milliards, huit cent cinquante et un millions, 
c quatre cent soixante quinze mille, cent quarante trois.

-5°) Structure du prgm : Au tout début du crinle d'Érastothènes, que j'applique pour avoir chaque nouveau nombre premier, je dois stocker des drapeaux disant si un nombre est premier ou pas.
     Voici l'instruction fautive :

sqBI.f:          print*, 'i=', i, ', is_p(i) =', is_p(i)

 .
 ..
 ...
 i=                15067 , is_p(i) =                    0
 i=                15068 , is_p(i) =                    0
 i=                15069 , is_p(i) =                    0
 i=                15070 , is_p(i) =                    0

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

-6°)

 [url]https://fortran-lang.discourse.group[/url]...nlimit-s/2970/ 

:

  Trop compliqué pour moi.


-7°) Élaguer : pas eu le temps. P'têt demain.


  Merci et bye,
    DAVID

Dernière modification par dva2tlse (Le 01/12/2022, à 20:32)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#4 Le 01/12/2022, à 19:09

xubu1957

Re : [RÉSOLU] SEGFAULT trop précoce

Bonjour,

Lecture conseillée > memento des balises code.

Dernière modification par xubu1957 (Le 02/12/2022, à 17:48)


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#5 Le 02/12/2022, à 17:45

dva2tlse

Re : [RÉSOLU] SEGFAULT trop précoce

c /HOME/DAVID/HHH/FORTRAN/FPRM/elag.f
c ce prgm doit réutiliser le module et faire le crible,
c avec, soit ./elag (sans lien de elag avec le module),
c soit ./sPBelag (script faisant le lien de elag avec le module).
c
c BI=BigInteger=600851475143 =
c  S71 × 839 × 1471 × 6857
c
c23456
c     !
c six cents milliards, huit cent cinquante et un millions, 
c quatre cent soixante quinze mille, cent quarante trois.
c     !
      program elag ! fichier elag.f scripté pour buildaison par sPBelag
      use commod
      implicit none
c     !
      print*
      print*
      print*, 'Crible d''Ératosthènes : (sq=avec "q"rible)'
c     !
      print*
      print*,
     +'---------------------------------------------------------------b'
      print*, ' État initial :'
      print*, 'lbound(is_p, 1)=', lbound(is_p, 1) ! =0
      print*, 'ubound(is_p, 1)=', ubound(is_p, 1) ! =0
c     !
      print*
      print*,
     +'---------------------------------------------------------------d'
      print*, ' Initialisation :'
      print*, 'is_p=(/ 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1 /)'
      print*, '        1  2  3  4  5  6  7  8  9 10 11'
c     ! J'assigne les is_p, et ça donne ça :
      is_p=(/0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1/) ! NE PAS faire is_p[1:11]
      print*, 'lbound(is_p, 1)=', lbound(is_p, 1) ! =1
      print*, 'ubound(is_p, 1)=', ubound(is_p, 1) ! =11
c     !
      NN=BI
      IsqBI=INT(SQRT(REAL(BI)))
      print*, 'IsqBI=', IsqBI
      do i=1, IsqBI
          print*, 'i=', i, ', is_p(i) =', is_p(i)  ! =0 GAML si is_p[1:11]=constructor 5/qq L.+Ht
      enddo
c     !
      print*
      print*,
     +'---------------------------------------------------------------u'
      print*, ' Fin.'
      print*
      stop
      end program elag
c     !
c  gfortran elag.f -fbounds-check -fdefault-integer-8 -std=f2018 -fno-backtrace -o elag

c  ./elag

c  ./sPBelag

Dernière modification par dva2tlse (Le 02/12/2022, à 18:06)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#6 Le 02/12/2022, à 19:58

pingouinux

Re : [RÉSOLU] SEGFAULT trop précoce

@dva2tise #5 :
Impossible de tester ton programme, il ne compile même pas.

Hors ligne

#7 Le 03/12/2022, à 19:34

dva2tlse

Re : [RÉSOLU] SEGFAULT trop précoce

il faut faire le lien avec le module commod.

#!/bin/sh
# scriptPourBuilderElag=sPBelag dans $HOME/FORTRAN/FPRM
rm *.o commod.mod
gfortran -c commod.f
gfortran -c elag.f
gfortran elag.o commod.o -fbounds-check -fdefault-integer-8 -std=legacy -fno-backtrace -pedantic -fcheck=all -o elag
./elag

c /HOME/DAVID/HHH/FORTRAN/FPRM/commod.f à utiliser avec elag.f
c23456
c
c34256
      module commod
      use iso_fortran_env, only: int64
      integer :: M=11
      integer :: N=5
      integer :: NN
      integer(kind=int64), allocatable, dimension(:) :: p(:) ! array that will hold the primes
      integer(kind=int64), allocatable, dimension(:) :: is_p(:)  !** is_p mainly holds an array
      integer(kind=int64), allocatable, dimension(:) :: tmp(:)   !   of integer intrinsic type 
c     !
      integer(kind=int64) :: i=1_int64, j=1_int64, k=1_int64, IsqBI
      integer(kind=int64) :: l=1_int64,  sq=0_int64
c     integer(kind=int64) :: BI=2310_int64 ! cas des cinq/six premiers premiers
      integer(kind=int64) :: BI=600851475143_int64 ! cas où le plus grand facteur premier est 6857.
      end module commod
c23456
c

xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#8 Le 03/12/2022, à 20:06

pingouinux

Re : [RÉSOLU] SEGFAULT trop précoce

Bon, j'ai réussi à reproduire l'erreur, et je vais regarder plus tard.

................................................
 i=                15070 , is_p(i) =                    0

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
................................................
Segmentation fault (core dumped)

Hors ligne

#9 Le 03/12/2022, à 20:47

dva2tlse

Re : [RÉSOLU] SEGFAULT trop précoce

ouais ! SUPER !


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#10 Le 03/12/2022, à 21:00

pingouinux

Re : [RÉSOLU] SEGFAULT trop précoce

J'ai un peu oublié la syntaxe du fortran, mais il me semble que ton tableau is_p n'est pas alloué, sauf peut-être les 11 premières valeurs.

Hors ligne

#11 Le 04/12/2022, à 19:21

dva2tlse

Re : [RÉSOLU] SEGFAULT trop précoce

Oui, c'est vaseux et je ne connais pas bien les "allocate", mais lui a trouvé. #10 de BRAVO !
David


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne