IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Problème de compilation segmentation fault


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Problème de compilation segmentation fault
    Voila je suis débutant en Fortran et j'ai créé un programme scientifique. Cependant il y a plusieurs questions que le me pose. Lorsque je compile mon code tout marche bien mais à l'éxécution on me met segmentation fault.
    J'ai alors utilisé Valgrind pour trouver le problème et voila ce qu'il m'écrit :
    ==17780== Memcheck, a memory error detector.
    ==17780== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
    ==17780== Using LibVEX rev 1575, a library for dynamic binary translation.
    ==17780== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
    ==17780== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
    ==17780== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
    ==17780==
    --17780-- Command line
    --17780-- ./EperVeille.out
    --17780-- Startup, with flags:
    --17780-- -v
    --17780-- --leak-check=yes
    --17780-- --show-reachable=yes
    --17780-- --max-stackframe=30088536
    --17780-- Contents of /proc/version:
    --17780-- Linux version 2.6.9-55.ELsmp (brewbuilder@ls20-bc2-14.build.redhat.com) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)) #1 SMP Fri Apr 20 17:03:35 EDT 2007
    --17780-- Arch and subarch: X86, x86-sse2
    --17780-- Valgrind library directory: /usr/lib/valgrind
    --17780-- Reading syms from /lib/ld-2.3.4.so (0x68F000)
    --17780-- Reading syms from /home/delcourt/Epervier/utilisateur/EperVeille.out (0x8048000)
    --17780-- Reading syms from /usr/lib/valgrind/x86-linux/memcheck (0xB0000000)
    --17780-- object doesn't have a dynamic symbol table
    --17780-- Reading suppressions file: /usr/lib/valgrind/default.supp
    --17780-- REDIR: 0x6A1450 (index) redirected to 0xB001BC86 (vgPlain_x86_linux_REDIR_FOR_index)
    --17780-- Reading syms from /usr/lib/valgrind/x86-linux/vgpreload_core.so (0x4000000)
    --17780-- Reading syms from /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so (0x4003000)
    --17780-- REDIR: 0x6A15F0 (strlen) redirected to 0x4005E90 (strlen)
    --17780-- Reading syms from /lib/tls/libm-2.3.4.so (0x7DC000)
    --17780-- Reading syms from /lib/tls/libc-2.3.4.so (0x6AE000)
    --17780-- REDIR: 0x717A10 (rindex) redirected to 0x4005B9C (rindex)
    --17780-- REDIR: 0x712380 (calloc) redirected to 0x4005639 (calloc)
    --17780-- REDIR: 0x718D90 (memcpy) redirected to 0x40061A8 (memcpy)
    --17780-- REDIR: 0x68F7A0 (_dl_sysinfo_int80) redirected to 0xB001BC83 (???)
    ==17780==
    ==17780== Process terminating with default action of signal 11 (SIGSEGV)
    ==17780== Access not within mapped region at address 0xBD182040
    ==17780== at 0x809F089: main (EperVeille.for:2)
    ==17780==
    ==17780== Process terminating with default action of signal 11 (SIGSEGV)
    ==17780== Access not within mapped region at address 0xBD181F8C
    ==17780== at 0x400031F: _vgw_freeres (vg_preloaded.c:58)
    ==17780==
    ==17780== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 13 from 1)
    --17780--
    --17780-- supp: 13 Ubuntu-stripped-ld.so
    ==17780== malloc/free: in use at exit: 1,005,496 bytes in 1 blocks.
    ==17780== malloc/free: 1 allocs, 0 frees, 1,005,496 bytes allocated.
    ==17780==
    ==17780== searching for pointers to 1 not-freed blocks.
    ==17780== checked 2,120,252 bytes.
    ==17780==
    ==17780== 1,005,496 bytes in 1 blocks are still reachable in loss record 1 of 1
    ==17780== at 0x40056BF: calloc (vg_replace_malloc.c:279)
    ==17780== by 0x778839: monstartup (in /lib/tls/libc-2.3.4.so)
    ==17780== by 0x8048B93: __gmon_start__ (in /home/delcourt/Epervier/utilisateur/EperVeille.out)
    ==17780== by 0x7DF31C: (within /lib/tls/libm-2.3.4.so)
    ==17780== by 0x7DF23A: (within /lib/tls/libm-2.3.4.so)
    ==17780== by 0x69B717: _dl_init (in /lib/ld-2.3.4.so)
    ==17780== by 0x68F7FE: (within /lib/ld-2.3.4.so)
    ==17780==
    ==17780== LEAK SUMMARY:
    ==17780== definitely lost: 0 bytes in 0 blocks.
    ==17780== possibly lost: 0 bytes in 0 blocks.
    ==17780== still reachable: 1,005,496 bytes in 1 blocks.
    ==17780== suppressed: 0 bytes in 0 blocks.
    --17780-- memcheck: sanity checks: 0 cheap, 1 expensive
    --17780-- memcheck: auxmaps: 0 auxmap entries (0k, 0M) in use
    --17780-- memcheck: auxmaps: 0 searches, 0 comparisons
    --17780-- memcheck: secondaries: 13 issued (832k, 0M)
    --17780-- memcheck: secondaries: 518 accessible and distinguished (33152k, 32M)--17780-- tt/tc: 2,754 tt lookups requiring 2,763 probes
    --17780-- tt/tc: 2,754 fast-cache updates, 3 flushes
    --17780-- translate: new 1,271 (28,729 -> 455,673; ratio 158:10) [0 scs]
    --17780-- translate: dumped 0 (0 -> ??)
    --17780-- translate: discarded 9 (214 -> ??)
    --17780-- scheduler: 26,594 jumps (bb entries).
    --17780-- scheduler: 0/1,562 major/minor sched events.
    --17780-- sanity: 1 cheap, 1 expensive checks.
    --17780-- exectx: 30,011 lists, 9 contexts (avg 0 per list)
    --17780-- exectx: 14 searches, 5 full compares (357 per 1000)
    --17780-- exectx: 0 cmp2, 38 cmp4, 0 cmpAll
    Segmentation fault
    Mes questions sont
    1/Qu'est ce que LibVex? On dit que c'est une bibliotheque de translation binaire dynamique. Mais sa consite en quoi exactement.

    2/ Pourquoi y a t'il une redirection de la zone memoire vers une autre zone ( dans Valgrind les lignes commençant par REDIR; pourquoi fait-il sa?)

    3/Où est l'erreur et pourquoi sa plante à l'exécution alors que la compilation se passe sans problème?

    Je pensais que c'était peut-être un probleme de pointeur, peut-être qu'il faut déallouer mais je ne sais pas trop comment faire.

    Pouvez vous maider? Je vous remercie beaucoup pour l'aide que vous pourrez m'apporter.

  2. #2
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    une erreur de segmentation viend souvent d'un dépassement de tableau: donc avant d'utilser valgrind, vérifie que tes tableaux ont bien la bonne dimenssion, et spécialement lorsque tu les passes en paramètre dans les fonctions...

    par contre je connais pas bien comment fonctionne valgrind donc je comprend pas bien les messages...

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Erreur d'execution
    Merci mais ce que je ne comprends pas c'est que sous windows sa marche nikel mais pas sous linux. Je n'ai pas de tableaux proprement dit juste j'utilise deux pointeurs et j'ai reverifié ils ont l'air bien alloué. Pouvez vous me dire comment on alloue et on dealloue un pointeur en fortran 90. Je sais que c'est allocate et deallocate mais je ne suis plus sur de la syntaxe. Et c'est pour les pointeurs pas les tableaux. Merci de votre aide.

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut encore des problemes
    Mon programme s'execute bien sous windows j'ai vérifié mes tableaux mais bon c ok. En fait j'ai plusieurs sous programmes et j'ai utilisé deux pointeurs. A chaque allocation de pointeurs on a un desallocate alor pourquoi sa merde? Et pourquoi dans valgrind me met il
    REDIR: 0x6A1450 (index) redirected to 0xB001BC86 (vgPlain_x86_linux_REDIR_FOR_index
    REDIR: 0x68F7A0 (_dl_sysinfo_int80) redirected to 0xB001BC83 (???)
    ==17780== Process terminating with default action of signal 11 (SIGSEGV)
    ==17780== Access not within mapped region at address 0xBD182040
    ==17780== at 0x809F089: main (EperVeille.for:2)
    ==17780==
    ==17780== Process terminating with default action of signal 11 (SIGSEGV)
    ==17780== Access not within mapped region at address 0xBD181F8C
    ==17780== at 0x400031F: _vgw_freeres (vg_preloaded.c:58)
    j y comprends plus rien. Aidez moi svp

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Pointeur
    J'ai une question a poser.
    Dans mon programme j'ai fait un type que j'ai appelé T_Dom.
    Dans le programme principal j'ai ecrit cette ligne en code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type(T_dom), pointer :: pDom,pCh_Dom
    pDom et pCh-Dom étant deux pointeurs.
    Ce que j'aimerais savoir c'est si je veux allouer ou deallouer ces pointeurs dois je passer par allocatable comme pour les tableaux et par la suite mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    allocate (pDom)
    ...
    desallocate (pCh_Dom)
    ou bien peut on directement passer de la ligne
    type(T_dom), pointer :: pDom,pCh_Dom à
    allocate(pointeur)
    ?
    Merci de votre aide. Répondez vite svp je suis vraiment paumé. Merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Pour ta dernière question, tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type (T_dom), pointer :: pDom
    ...
    allocate (pDom)
    ...
    deallocate(pDom)
    Si on revient à ta question initiale, tu donne assez peu d'information. Tu utilise des pointeurs et des sous-programmes, mais pas de tableau et tu as un segmentation fault. À ma connaissance, un seg fault, ça découle du fait que le programme veut accéder à une adresse illégale et c'est généralement causé par 3 situations : un débordement de tableau (ça ne semble pas ton cas), un problème d'interface, ou une mauvaise adresse dans un pointeur.

    Tes sous-programmes sont-ils tous dans des modules ? Passes-tu des pointeurs d'un sous-programme à l'autre ?

  7. #7
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    d'une manière général, si ton code fonctionne sur un système et pas sur un autre c'est qu'il y a un problème (et le système sur lequel cela ne marche pas est plus intéréssant car il te permet de corrigé l'erreur)

    en général, je me débrouille pour ne pas utilsé les pointer en fortran...

    cela dit à quoi te servent tes pointeurs??

    pense aussi que si tu déclare un tableau 1:N tu peux parfaitement l'utilisé dans une routine en l'indicant -3:N-3 ou même n'en utilisé qu'une partie en donnant les bonnes limites mais attention à la mémoire...

    est-ce que tout tes tableau sont bien alloué lorsque tu les utilise? (instruction allocated)

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Problème
    Merci pour votre précieuse aide.
    Effectivement j'ai reussi à trouver ce problème c'était un tableau que je n'avais pas alloué et dû à sa trop grande taille il y a eu un dépassement mémoire au niveau de la pile donc il a fallu le mettre sur le tas en utilisant un allocatable.
    Cependant j'ai un autre problème . Lors de l'execuution il est ecrit:

    Error in fortran,
    Reference to a disassociated pointer Pdom.

    Pouvez vous m'aider une fois encore, Merci pour votre aide.

Discussions similaires

  1. erreurs de compilation + segmentation fault
    Par gbauby dans le forum Débuter
    Réponses: 11
    Dernier message: 25/04/2012, 21h52
  2. Problème : pas de segmentation fault ?!
    Par Loïc B. dans le forum C++
    Réponses: 3
    Dernier message: 05/11/2007, 17h08
  3. Réponses: 6
    Dernier message: 01/11/2007, 18h44
  4. [Socket SSL] problème de "Segmentation fault"
    Par jesus144 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 09/03/2007, 19h50
  5. Problème Segmentation Fault
    Par marcix dans le forum C
    Réponses: 4
    Dernier message: 04/12/2006, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo