Bonsoir,
Les Topics se suivent...mais ne se ressemble pas! J'ai un petit, bon d'accord un gros problème avec un bout de code qui concerne une liste générique doublement chaînée lorsque je l'utilise avec des vecteurs (pas ceux de la STL...).
Le problème est une fuite mémoire assez bizarroïde (c'est le propre d'une fuite mémoire?) qui se passe quand je lance le programme et qui freeze DrWatson (le débugeur post-mortem qui arrive après le crash de l'application) une 30aine de seconde...Donc réflexe, je lance le débugueur de C::B et là.... PATATRAAAAA, ça fonctionne au poil...
Du côté liste :
Du côté vecteur (dim étant un entier, non signé, prédéfini)
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 template<typename TYPE, unsigned int nb_cur> struct LIST { ///Data level struct ELMT { ELMT* prev; TYPE data; ELMT* next; ELMT(ELMT* p, TYPE& dat) : data(dat) { prev = p; } }; ///Data unsigned int length; ELMT *fst; ELMT *cur[nb_cur]; ELMT *lst; LIST() { unsigned int i; length = 0; fst = NULL; lst = NULL; for(i=0; i<nb_cur; i++) cur[i]=NULL; return ; } unsigned int push(TYPE& data) { //Data problem if( fst==NULL ) { fst = new ELMT(NULL, data); lst = fst; } else { lst->next = new ELMT(lst, data); lst = lst->next; } length++; return length; } };
(bien entendu j'ai allégé un peu le code...)
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 struct VECTOR { float* data; VECTOR() { data = new float(dim); return ; } VECTOR(VECTOR& v) { unsigned int i; data = new float(dim); for(i=0; i<dim; i++) *(data+i) = *(v.data+i); return ; } VECTOR& operator= (const VECTOR& v) { unsigned int i; for(i=0; i<dim; i++) *(data+i) = *(v.data+i); return *this; } };
et pour le test :
(dois-je aussi utiliser plutôt memcpy et memset pour mes opérations sur des tableaux???)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 VECTOR a; LIST<VECTOR,1> lst; lst.push(a);
Voili, voilou, je vous remercie de m'aider.
Partager