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 :

Pointer Fortran 90


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut Pointer Fortran 90
    Bonjour à tous...

    Voilà un petit programme de FORTRAN 90
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IMPLICIT NONE
    REAL*8, POINTER::v(
    ALLOCATE(v(2))
    v(1) = 1d0
    v(2) = 2d0
    write(*,*) v
    DEALLOCATE(v)
    write(*,*) v
    END
    Et son résultat:
    1.00000000000000000 2.00000000000000000
    0.000000000000000000E+00 2.00000000000000000

    Comment expliquer le fait que, malgré la désallocation du pointer v, v(2) est toujours référencé et contient encore la bonne valeur ? La mémoire est-elle vraiment désallouée ? En remplaçant POINTER par un tableau type ALLOCATE, le comportement n'est pas le même... pourquoi ?

    Merci de votre aide !!!

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Cela depend du compilateur que tu utilises - le tien semble autoriser beaucoup de choses.
    En reprennant ton programme et le mettant au standard F90, on a
    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
     
    program toto
    implicit none
     
    double precision, dimension(:), pointer :: ptr
     
    allocate(ptr(2))
    ptr(1) = 1.0d0
    ptr(2) = 2.0d0
     
    write(*,*) ptr
    deallocate(ptr)
    write(*,*) ptr
     
    end
    En utilisant pgf90, le deuxieme write ne s'effectue pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        1.000000000000000         2.000000000000000
    En utilisant ifc, le compilateur se plaint que le pointeur n'est plus valide:
    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
     
       1.00000000000000        2.00000000000000
     
     
    Input/Output Error 458: Object not allocated
     
       In Procedure: main program
            At Line: 12
     
          Statement: List-Directed WRITE
               Unit: 6
       Connected To: Stdout
               Form: Formatted (contains List-Directed records)
             Access: Sequential
    Records Read   : 0
    Records Written: 1
     
    End of diagnostics
    Regarde dans la doc de ton compilateur pour savoir s'il y a une option pour forcer la verification qu'un pointeur est ASSOCIATED(). Sinon, il faut le faire toi-meme.
    Remarque que si tu n'avais pas mis le dimension(: ) dans la declaration de ton pointeur, cela n'aurait pas du compiler.

  3. #3
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut
    Très exact!

    Merci bien

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

Discussions similaires

  1. Problème en interfacant C et Fortran
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 23/05/2006, 16h10
  2. templates et smart pointers
    Par delire8 dans le forum C++
    Réponses: 9
    Dernier message: 10/07/2003, 16h26
  3. Réponses: 5
    Dernier message: 05/07/2003, 11h52
  4. [TP]Portage d'un encodeur MP3 Fortran en pur Pascal...
    Par Christophe Fantoni dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 04/07/2003, 17h34
  5. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

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