Bonjour,
Je fais un petit programme ou j'utilisais les listes chainées. J'avais décider de tout gérer moi même, mais je me suis retrouve en difficulté. Comme mon implémentation de liste n'était pas top top ! Je me suis tourne vers la STL.
Mais, alors que je n'avais pas de fuite de mémoire... maintenant j'en ai ! Mon problème est que M. Valgrind ne détecte aucune erreur... Et pourtant petit a petit la mémoire grimpe grimpe et mon prog en mange et en mange....
Je me demande donc si je n'ai pas oublier quelques choses :
Et voici le code en question :
Bien sur tous les Segment* sont désalloués dans une autre fonction ! Je ne veux surtout pas les désallouer maintenant !
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 if((tabBin!=NULL)&&(tabSeg!=NULL)&&(tabVertices!=NULL)&&nbSeg>2) { list<Line*>::iterator iter; list<Line*> workingSegments; Line* addList[2]; Line* delList[2]; Line* seg; int numWorkingSegments=0; int iDelList=0; int nbDelList=0; cout<<"fillBin is running..."<<endl; for(unsigned int iVertices=0;iVertices<nbSeg;iVertices++) { iDelList=INIT; nbDelList=INIT; Vertices* vCurrent=tabVertices[iVertices]; cout<<"..................."<<iVertices+1<<" Out of "<<nbSeg<<endl; for(int init=0;init<2;init++) { addList[init]=NULL; delList[init]=NULL; } for(unsigned int iSeg=0;iSeg<2;iSeg++) addList[iSeg]=*(vCurrent->getSegments()+iSeg); if(iVertices==0) { cout<<"Current Vertices : "<<vCurrent<<endl; workingSegments.push_back(addList[0]); addList[0]->setActivity(true); workingSegments.push_back(addList[1]); addList[1]->setActivity(true); numWorkingSegments+=2; cout<<"ajoute : "<<addList[0]<<endl; cout<<"ajoute : "<<addList[1]<<endl; } if(iVertices>0) { cout<<"Current Vertices : "<<vCurrent<<"and alpha = "<<vCurrent->getAngle()<<endl; for(iter=workingSegments.begin(); iter!= workingSegments.end(); ++iter) { cout<<"Vertices : "<<(*iter)->getPtIni()<<" and "<<(*iter)->getPtFin()<<" belong to WorkingSegment : "<<(*iter)<<endl; if(((*iter)->getPtIni()==vCurrent) || ((*iter)->getPtFin()==vCurrent)) { if(nbDelList<2) // if(delList is not Full) {cout<<(*iter)<<"** added to delList["<<nbDelList<<"]."<<endl<<endl; delList[nbDelList]=(*iter); nbDelList++; } } } for(int i=0;i<2;i++) { if(addList[i]->getActivity()==false) //if segment in addList is not in WorkingSegment list { cout<<"ajoute : "<<addList[i]<<endl; workingSegments.push_back(addList[i]); numWorkingSegments++; addList[i]->setActivity(true); } } } for(int i=0;i<2;i++) { if(delList[i]!=NULL) { if(delList[i]->getActivity()==true) //if segment in delList is in the WorkingSegment list { workingSegments.remove(delList[i]); cout<<"retire : "<<delList[i]<<endl; numWorkingSegments--; } } } cout<<numWorkingSegments<<endl; if(numWorkingSegments!=0) { for(iter=workingSegments.begin(); iter!= workingSegments.end(); ++iter) tabBin[iVertices].addSeg(*(iter)); // sortSeg(tabBin[iVertices].getTabSeg(),numWorkingSegments); } else { cout<<"fin"<<endl; tabBin[iVertices].addSeg(NULL); } } cout<<"fillBin ended..."<<endl; } }
Merci Merci
Partager