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 :

Bug avec allocation dynamique de tableaux


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Par défaut Bug avec allocation dynamique de tableaux
    Bonjour,

    je suis complètement paumé...
    J'ai un programme que je compile avec gfortran et dans lequel j'alloue une petite dizaine de tableaux dynamiquement. Aucun problème jusque là, ni dailleurs pour les calculs. A la fin de ce programme je désalloue comme il se doit les tableaux. C'est là que ça fait mal ! La désallocation de l'un d'entre eux (que j'ai identifié) me renvoie le bug suivant que je ne comprends pas et donc ai du mal à résoudre...

    Donc dans l'ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INTEGER   (KIND=4),DIMENSION(:)      ,ALLOCATABLE :: tab_mv  
     
    (Calcul de dim_tab_mv)
     
    ALLOCATE(tab_mv(dim_tab_mv))
     
    (Calcul)
     
    DEALLOCATE(tab_mv)
    Si quelqu'un a une idée, merci d'avance.
    Yann.
    *** glibc detected *** ./prog.x: free(): invalid pointer: 0x0805a6c0 ***
    ======= Backtrace: =========
    /lib/tls/i686/cmov/libc.so.6[0xb7e0fa85]
    /lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7e134f0]
    /usr/lib/libgfortran.so.2(_gfortran_deallocate+0x29)[0xb7f332b9]
    ./prog.x[0x804e784]
    ./prog.x[0x804e817]
    /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7dba450]
    ./prog.x[0x8048b41]
    ======= Memory map: ========
    08048000-0804f000 r-xp 00000000 08:01 7947833 /home/yann/Travail/These/MCMP/MCMP_F90/Dev/prog.x
    0804f000-08050000 rw-p 00006000 08:01 7947833 /home/yann/Travail/These/MCMP/MCMP_F90/Dev/prog.x
    08050000-08071000 rw-p 08050000 00:00 0 [heap]
    b7c00000-b7c21000 rw-p b7c00000 00:00 0
    b7c21000-b7d00000 ---p b7c21000 00:00 0
    b7da3000-b7da4000 rw-p b7da3000 00:00 0
    b7da4000-b7eed000 r-xp 00000000 08:01 4342999 /lib/tls/i686/cmov/libc-2.7.so
    b7eed000-b7eee000 r--p 00149000 08:01 4342999 /lib/tls/i686/cmov/libc-2.7.so
    b7eee000-b7ef0000 rw-p 0014a000 08:01 4342999 /lib/tls/i686/cmov/libc-2.7.so
    b7ef0000-b7ef3000 rw-p b7ef0000 00:00 0
    b7ef3000-b7efd000 r-xp 00000000 08:01 4309010 /lib/libgcc_s.so.1
    b7efd000-b7efe000 rw-p 0000a000 08:01 4309010 /lib/libgcc_s.so.1
    b7efe000-b7eff000 rw-p b7efe000 00:00 0
    b7eff000-b7f22000 r-xp 00000000 08:01 4343003 /lib/tls/i686/cmov/libm-2.7.so
    b7f22000-b7f24000 rw-p 00023000 08:01 4343003 /lib/tls/i686/cmov/libm-2.7.so
    b7f24000-b7fba000 r-xp 00000000 08:01 8798311 /usr/lib/libgfortran.so.2.0.0
    b7fba000-b7fbb000 rw-p 00096000 08:01 8798311 /usr/lib/libgfortran.so.2.0.0
    b7fcb000-b7fcd000 rw-p b7fcb000 00:00 0
    b7fcd000-b7fce000 r-xp b7fcd000 00:00 0 [vdso]
    b7fce000-b7fe8000 r-xp 00000000 08:01 4309011 /lib/ld-2.7.so
    b7fe8000-b7fea000 rw-p 00019000 08:01 4309011 /lib/ld-2.7.so
    bfbd6000-bfbeb000 rw-p bffeb000 00:00 0 [stack]
    Abandon

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Es-tu bien certain que l'allocation s'est initialement bien passée (mais j'image que oui vu qu'il y a une phase de calcul après).

    Je te recommandes quand même de vérifier systématiquement les allocations/déallocations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    INTEGER   (KIND=4),DIMENSION(:)      ,ALLOCATABLE :: tab_mv
    INTEGER :: ierr
     
    (Calcul de dim_tab_mv)
     
    ALLOCATE(tab_mv(dim_tab_mv),stat=ierr)
    IF (ierr/=0) THEN
      WRITE(*,*) 'Erreur allocation de tab_mv'
      STOP
    ENDIF
     
    (Calcul)
     
    IF (ALLOCATED(tab_mv)) THEN
      DEALLOCATE(tab_mv,stat=ierr)
      IF (ierr/=0) THEN
        WRITE(*,*) 'Erreur deallocation de tab_mv'
        STOP
      ENDIF
    ENDIF
    Et pas seulement pour le tableau où il semble qu'il y ai problème; il y a parfois des effets de bord assez surprenants...

    Bon courage,

    Ehouarn

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Par défaut
    Bonjour,
    Je compile pour ma part avec g95 et j'ai eu à plusieurs reprises le même type de problèmes. Il s'est avéré dans tous les cas que ce n'était pas le tableau évoqué par le compilateur qui posait problème, mais un autre qui n'était pas alloué ou dont la taille n'était pas suffisante (erreurs d'indexation des dimensions).
    Je te conseille donc de tester les autres tableaux qui interviennent dasn ton programme...
    Bon courage.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Par défaut
    Salut merci beaucoup à vous et pour la combine du stat que je ne connaissais pas !
    J'ai fini par trouver, en fait il y avait un dépassement de ce tableau dans l'une des subroutines... Je ne comprends toujours pas pourquoi il ne m'a renvoyé le message habituel "segmentation fault" bref, problème résolu !

    Merci à vous et bonne journée,
    Yann.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/11/2008, 17h29
  2. Erreur d'allocation dynamique de tableaux
    Par lclclc dans le forum Fortran
    Réponses: 1
    Dernier message: 02/04/2008, 15h10
  3. Réponses: 6
    Dernier message: 02/04/2007, 14h20
  4. allocation dynamique et tableaux de pointeurs
    Par gbardy dans le forum 4D
    Réponses: 3
    Dernier message: 06/07/2006, 11h08
  5. Membres statics avec allocation dynamique
    Par b Oo dans le forum C++
    Réponses: 4
    Dernier message: 07/05/2006, 17h13

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