Prd de fuite mémoire.

gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004 - 15 avril 2004 à 13:48
gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004 - 15 avril 2004 à 15:09
Salut à tous, dans mon programme je dois utiliser beaucoup de matrice et donc pas mal d'allocation dynamique. Je desalloue regulièrement mes tableaux(destructeurs et desallocation), pourtant j ai une légère occupâtion de l espace mémoire en plus. Mon problème est que ce programme doit tourner pendant plusieurs heures sur un grand jeu de données, et ma mémoire sature. j ai utilisé la méthode _CtrDumpMemoryleaks(); pour voir d où provenait la fuite mais j arrive pas a determiner précisement l 'erreur ( la fuite viens la plupart du temps lors de l allocation). Donc je voudrais savoir si qq 1 connait une méthode pour déterminer de facon précise le lieu de la fuite mémoire ... Si qq 1 à une idée, merci d avance...

2 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 avril 2004 à 14:18
http://www.cppfrance.com/code.aspx?ID=18085

je ne me souvient pas si ca donne la ligne ou a été faire l'allocation, mais en remplacant new par quelque chose comme new(_NORMAL_BLOCK, __FILE__, __LINE__) tu devrais y arriver
0
gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004
15 avril 2004 à 15:09
Je te remercie vecchio56 ,mais ta fonction donne la meme info que le _CtrDumpMemoryleaks(); , j obtiens le lieu de l'erreur: ex :
matrice.cpp(343) : {17077} normal block at 0x004721F0, 4 bytes long.
qui correspond à
Resultat->Mat=(float **) malloc((L1)*sizeof(float *));
for(i=0;i<L1;i++)
Resultat->Mat[i]=(float*) malloc(C2*sizeof(float));
(new ou malloc, ca change pas).
Mais j obtiens toutes les fuites d'un coup, meme en avancant au pas a pas, elles arrivent toutes à la fin d'une boucle (300 lignes de fuites). Et je vois pas où j aurais pu oublier de desallouer! Donc je voulais avoir un truc qui me donne l erreur au "pas a pas" afin de pouvoir cibler l erreur, mais là, les erreurs arrivent toutes à la fin d'une opération qui en appelle bcp d'autre et j ai aucune perte tant que je suis pas sorti de la boucle. Donc je cherche mais ..... En tout cas merci, mais j ai le meme resultat avec l autre méthode.
0
Rejoignez-nous