Bonjoru tout le monde.
Dans un programme plus vaste, j'ai un problème avec un constructeur/desctructeur. Le crash vient au moment de libérer la mémoire quand tous les destructeurs sont appelés en chaine.
(je ne mets pas tous les include pour na pas polluer, include "string.h", include des classes.h)
Classe principale encapsulant un sous classe B
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //Programme principale void main() { CTestB loc_test_b = CTestB(); { CTest loc_test2 = CTest(loc_test_b); //delete loc_test2; test effectué en faisant un new a la ligne précédente } };
Contenu de la classe b :
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 class CTest { public: CTest(); CTest(CTestB&); ~CTest(); private: CTestB m_test_B; }; //Code CTest::CTest() { m_test_B = CTestB(); } CTest::CTest(CTestB& par_test_b) { m_test_B = CTestB(par_test_b); } CTest::~CTest() { //delete m_test_B; }
Le problème survient au delete addr. Ce pointeur a déjà été libéré ... Grrr, l'erreur doit être basique mais je m'y perd.
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 class CTestB { public: CTestB(); ~CTestB(); CTestB(const CTestB& par_cls_testB); char* mGetAddr() const {return addr;}; private: char *addr; }; //CODE CTestB::CTestB() { addr = new char[20]; strncpy(addr, "init", 5); } CTestB::CTestB(const CTestB& par_cls_testB) { addr = new char[20]; strncpy(addr, par_cls_testB.mGetAddr(), 5); strncat(addr, "copy", 5); } CTestB::~CTestB() { if(addr != NULL) { delete addr; addr = NULL; } }
Quelqu'un voit il mieux que moi ?
Partager