Bonsoir,
En résumant, j'ai un programme qui prend en paramètre un nom de fichier (contenant plusieurs options utiles à son déroulement), et après moults calculs renvoie des prédictions de courbes en sortie de code de calcul.
Ce que je trouve très étrange, c'est qu'il fonctionne très bien quand on hardcode le chemin du fichier dans le main.cpp : il ne prend alors plus aucun argument, et tourne parfaitement en renvoyant des résultats très plausibles. Que ce soit avec le compilo de Code::Blocks ou celui de Visual C++ Express. Par contre quand je le lance depuis un terminal (sous windows XP en ce moment), il crashe en m'indiquant une tentative d'accès à l'adresse 0x00000 =/
J'ai isolé l'endroit qui plante, c'est un tout petit malloc, dans une librairie a priori fiable (SVM-light). ça doit donc venir de mon programme, mais je sais pas trop par où chercher..
Piste: En lançant le programme avec un argument, il effectue un décalage de toutes les allocations mémoires car faut bien stocker argv[1]. Si mon programme comporte des utilisations de zones mémoires non affectées, ou des fuites mémoires ..etc, ça se ressentirait sans doute. Enfin c'est mon interprétation (n'expliquant pas que sur les quelques exemples que j'ai sous la main ça fonctionne très bien sans argument =/).
Petites questions:
- un bug "accès à 0x00000" en plein milieu de la fonction malloc, ça peut vouloir dire quoi ?
- vous avez déjà eu ce genre de problème ? (si oui, résolu comment ? )
Dès que je pourrai tester avec valgrind sous Linux je le fais (je viens juste de découvrir cet outil), et en attendant si vous avez d'autres idées elles sont les bienvenues :-)
EDIT: en attendant j'ai testé avec la version d'évaluation d'IBM Rational Purify, il me trouve une vingtaine de memory leaks =/ Pas bon tout ça.. N'ayant pas trop envie de l'acheter, j'attends valgrind pour en savoir plus.
Merci d'avance.
Partager