Erreur mémoire fortran

Fermé
Rémi - 17 oct. 2012 à 11:16
 Rémi - 17 oct. 2012 à 14:47
Bonjour,

ma question sera assez générale car j'aurais du mal à extraire un cas concrès.

Contexte: dans un logiciel écris majoritairement en Fortran, mais dont l'interface est en C (qui wrappe donc le fortan), j'ai le bug suivant:
- un tableau est rempli (légalement) et est ensuite remodifié (illégalement cette fois).

Je comprends que ce 2nd remplissage vienne du fait que, quelquepart, on doit accéder à une variable incorrectement (dépassement d'un indice max de tableau ou autre).

PAR CONTRE (et c'est la le corps de ma question), je ne comprends pas que, lors du débug manuel (pq biensûr le bug ne se reproduit pas en mode débug), cette erreur de 2nd remplissage illégal s'estompe à l'affichage du tableau.
Concrètement: je rajoute des prints pour remonter à la source du problème, et il apparait qu'un des print "résolve" le problème (plus que 'résoudre', je devrais utiliser le verbe 'tomber en marche': ça marche mais on ne asit pas pourquoi...).

Quelqu'un aurait une explication ?

PS: je vous l'avais dit, ma question n'est pas bien concrète.

Merci d'avance aux esprits supérieurs de la prog qui pourraient m'éclairer

1 réponse

Utilisateur anonyme
17 oct. 2012 à 11:38
Bonjour

Avec si peu d'informations, ce n'est pas d'un esprit supérieur que tu as besoin, c'est d'un devin.

Tout est possible dès que tu as un bug. Si quelque chose vient écrire accidentellement dans ton tableau, il suffit de modifier une adresse quelque part pour que ça aille écrire ailleurs.
0
"il suffit de modifier une adresse quelque part pour que ça aille écrire ailleurs." -> je suis bien d'accord avec ça.

Mais une impression écran + un flush de la sortie standard modifieraient des adresses ?
0
Utilisateur anonyme
17 oct. 2012 à 14:41
Tu sais ce que tu as fait, pas moi car tu es avare de détails...
Il est évident que les adresses du code bougent dès que tu changes une instruction, et selon que tu compiles en debug ou release. Mais le problème n'est probablement pas là, les écritures sauvages dans la zone du code, faciles à faire autrefois, doivent être piégées de nos jours, tu ne peux plus en faire s'en t'en rendre compte.
Même si tu n'ajoutes pas explicitement de variable, l'ajout d'une fonction peut ajouter des variables ou modifier l'ordre de l'édition de liens, avec la même conséquence : des adresses bougent.
0
Dieu (ben oui si tu est le père de tout le monde ...), je ne suis pas avare de détails mais cette situations s'est produites à 2 reprises dans des parties bien distinctes du logiciel, et je ne veux pas une solution la solution genre 'ben ouais t'as mal fait [...] donc fait [...] et ça marche', je veux "juste" comprendre comment un simple affichage peut modifier le comportement du bordel :)

"l'ajout d'une fonction peut ajouter des variables ou modifier l'ordre de l'édition de liens, avec la même conséquence : des adresses bougent." -> c'est le genre de réponse que je demandait (effectivement, à question imprécise réponse imprécise).

Merci
0