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 :

Exception : access violation


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut Exception : access violation
    Bonjour, j'espère que j'écris au bon endroit dans ce forum !
    J'ai cherché longuement une réponse à ma question mais, n'en trouvant pas, j'ose vous écrire pour vous faire part de mon problème :

    Je travaille sous Photran avec g95, et j'ai aussi un problème d'écriture dans mes fichiers. Mon programme a la forme suivante :

    Dans le programme principal, j'ouvre un fichier, j'appelle une subroutine qui écrit dans le fichier, et je ferme le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OPEN(31, file = 'toto.dat')
    CALL titine(A,B)
    CLOSE(31)
    Ma subroutine 'titine' est dans un module, elle effectue :

    c'est tout simple !! Dans mon programme principal, plusieurs appels à plusieurs subroutines du type de 'titine' sont effectués, et, de façon aléatoire, j'obtiens l'erreur :

    Exception : access violation
    Traceback: not available, compile with -ftrace=frame or -ftrace=full
    J'entends "aléatoire" par le fait que : une fois, j'aurais cette erreur pour l'ouverture du fichier 'toto.dat', une autre fois, pour l'ouverture du fichier 'tutu.dat', et plus pour 'toto.dat'.

    J'avoue que je suis complétement perdue... Ces erreurs sont dues à des problèmes d'accès à de la mémoire protégée, mais je ne comprends pas en quoi je viole l'accès ?
    Toute aide de votre part sera la bienvenue, je n'ai plus de ressource !
    Merci d'avance,

    Marie

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    dans ce que tu écris, je ne vois rien qui me paraisse anormal. à part peut être le fait que tu aurais pu transmettre le numéro d'unité logique de ton fichier (31 dans ton exemple) à la fonction titine avec un argument.

    déjà la première chose que je ferai c'est compiler avec l'option que te propose ton compilateur pour avoir le traceback, c'est souvent très riche en information. si tu ne sais pas lire un traceback, tu n'as qu'à nous le copier ici.

    sinon, le fait de passer à titine deux arguments (a et b) qu'elle n'utilise pas c'est voulu ? c'est peut être au niveau de la déclaration de ces variables qu'il faut chercher.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    Bonjour,

    merci pour cette rapide réponse, hier j'ai écrit très rapidement mon programme, c'est pour cela que j'ai mis A et B, mais en effet ce n'est pas mon cas ici. Aujourd'hui à la compilation, tout s'est bien passé et je n'ai plus aucune erreur (!!) alors que je n'ai strictement rien changé depuis hier !!
    Je soupçonne autre chose que mon programme lui-même de planter..

    je copie quand même une partie de mon programme principal :

    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
    22
    23
    24
    25
    ! Chargement des vitesses
    !------------------------
     
      OPEN(31, file = "toto.dat")
     
      CALL loadvelo (M, N, V)
     
      CLOSE(31, iostat = ierr)
      WRITE(6,*) 'ierr', ierr
     
      WRITE(6,*) 'velo_ok'
     
    ! Jusqu'ici tout se passe bien
     
    !Appel de titine
    !----------------
     
      OPEN(41, file = "tutu.dat")
     
      CALL titine (V, M, R)
     
      CLOSE(41)
     
      WRITE(6,*) 'correl_ok'
    !
    sachant que la routine loadvelo fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        DO j = 1, M 
           DO i = 1, N
              READ (31,*) X(i), V(j,i)
           END DO
           READ (31,*) 
        END DO
    et que titine fait, elle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        tV = TRANSPOSE(V)
     
        R = (1.0/M)* MATMUL(V,tV)
     
        DO i = 1, M
            DO j = 1, M
                WRITE(41,*) R(i,j)
            END DO
            WRITE(41,*)
        END DO
    Il me semble qu'il n'y a pas de problème particulier ! J'ai pensé au fait de ne pas transmettre le numéro d'unité à la subroutine, et j'ai donc fait le test en ouvrant le fichier directement dans la routine et pas dans le programme principal, ceci n'a rien changé.

    Par contre, je ne sais pas faire de traceback, comment s'y prend-t-on ?

    Merci encore mille fois, pour le moment (disons pour aujourd'hui), mon problème semble être résolu... Mystère...

    Cordialement,

    Marie

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    je suis toujours méfiant des pbs qui se résolvent tous seuls

    sinon pour avoir un traceback, ton compilo te le dit lui même dans ton premier message :

    Traceback: not available, compile with -ftrace=frame or -ftrace=full

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    Moi aussi je me méfie beaucoup...
    Pour compiler, je rajoute cette ligne de commande :ou dans mon Makefile ?
    c'est bien cela ?
    Merci,

    Marie

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    si tu utilises un Makefile, c'est en effet là dedans que tu peux ajouter l'option.

    je ne connais pas ton compilateur, donc je ne sais pas quelles sont les différences entre les deux options.

    si c'est toi qui a écrit le Makefile, je pense que tu sauras où le mettre. Si ce n'est pas toi regarde si par hasard tu n'aurais pas une variable FFLAG au début du Makefile, si oui, ajoute là ici. Si tu es perdue, montre nous ton Makefile.

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

Discussions similaires

  1. [VxiR2] Exception Access Violation lors de la sauvegarde d'un rapport
    Par carden752 dans le forum Deski
    Réponses: 2
    Dernier message: 05/08/2011, 12h53
  2. probleme fortran 90 exception:access violation
    Par rijks dans le forum Fortran
    Réponses: 2
    Dernier message: 25/10/2010, 15h14
  3. First-chance exception + Access violation
    Par ben_popcorn dans le forum C++/CLI
    Réponses: 0
    Dernier message: 08/10/2010, 13h58
  4. Exception Access violation
    Par khalifa_2111 dans le forum Général Java
    Réponses: 0
    Dernier message: 13/07/2009, 12h24
  5. Exception access violation
    Par davish dans le forum Général Java
    Réponses: 11
    Dernier message: 04/06/2008, 13h19

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