Bonjour,
Je ne savais pas trop où poser ma question à propos de Purify. J'ai jugé bon de la mettre là mais si un modérateur voit bon de la déplacer, pas de soucis pour moi
Alors voilà. J'ai un programme qui fonctionne plutôt bien: compilation sans trop de warnings (aucun en fait sauf dans les fichiers que je n'ai pas le droit de toucher) et des résultats cohérents avec ce que je dois obtenir.
J'ai quand même voulu passer un coup de Purify sur tout ça, histoire de voir si je n'avais pas de soucis "cachés" quelque part au fin fond de mon code.
Et voilà qu'apparaissent des UMR (Uninitialized Memory Read). J'ai donc voulu les supprimer. Mais:
1- A ma grande surprise, j'ai obtenu un UMR parce que je n'avais pas initialisé une structure alors que le compilo ne m'a pas envoyé de warning à la compilation du genre "strusture struct non initialisée". Comment est-ce possible?
2- (et c'est le gros soucis qui m'ammène):
Voici l'un des UMR que j'obtiens (le fameux UMR sur ma structure du point 1-):
**** Purify instrumented nomexecutable (pid 15649) ****
UMR: Uninitialized memory read:
* This is occuring while in thread 15649:
fonction_tata [tata.f:15]
fonction_toto [toto.f:23]
fonction_titi [titi.f:98]
MAIN (void) [main.f:154]
main [libfrtbegin.a]
* Reading 4 bytes from 0xfffbe5b on the stack of thread 15649 (2 bytes at 0xfffc3ed uninit)
* Adress 0xfffc3ed is 16 bytes past start of local variable "STRUCT" in fonction fonction_tata
J'ai bien compris que pour trouver le problème, on allait de bas en haut. Exemple ici:
La fonction MAIN (void) définie dans le fichier main.f fait appel ligne 154 à la fonction fonction_titi.
La fonction fonction_titi définie dans le fichier titi.f fait appel ligne 98 à la fonction fonction_toto.
La fonction fonction_toto définie dans le fichier toto.f fait appel ligne 23 à la fonction fonction_tata.
Le problème se trouve à la ligne 15 du fichier tata.f, avec visiblement un problème sur "STRUCT"
Ici, j'ai résolu le problème, pas de soucis. Il fallait simplement initialiser la structure.
Cependant, voici un autre UMR que j'obtiens:
**** Purify instrumented nomexecutable (pid 15649) ****
UMR: Uninitialized memory read:
* This is occuring while in thread 15649:
f_inqu [libg2c.a]
fonction_truc1 [truc1.f:102]
fonction_truc2 [truc2.f:73]
fonction_truc3 [truc3.f:45]
MAIN (void) [main.f:85]
main [libfrtbegin.a]
* Reading 4 bytes from 0xfffbe5b on the stack of thread 15649
* Adress 0xfffbe5b is 16 bytes below frame pointer in fonction f_inqu
Mon problème ici c'est que ma dernière étape (donc la première ligne) est libg2c.a. J'ai donc l'impression que le problème ne vient pas de mon code mais de la librairie libg2c.a. Mais ça me parait être étrange qu'il puisse y avoir des problèmes sources d'UMR dans ces librairies...
Suis-je trop naif? Est-ce possible? Si oui, que faire? Si non, d'où peut venir mon problème?
Merci d'avance pour votre aide
Josiane
Partager