Bonjour à toutes et à tous,
Comment faire pour libérer la mémoire d'un tableau de double qui est dans une classe dérivée d'une classe abstraite 'Base' et instanciée suivant cette dernière ? Par exemple:
Ici, le destructeur de Chat() est bien appelé mais le free(toto) génère un dump core. Si je supprime free(toto); pas de problème, mais je suppose que je génère une fuite mémoire (toto n'étant pas désalloué). Je suppose que c'est lié au fait que Simulation détruit le pointeur 'mon_animal' dans la foulée.
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 Class Animal { protected : public : virtual int GetPoils() = 0; }; Class Chat:public Animal{ public: int GetPoils() { return toto[0];} Chat(){ toto = (double *) malloc(2 * sizeof(double)); toto[0] = 1.0; toto[1] = 2.0; } ~Chat(free(toto)); private: double * toto; }; Class Simulation { private: Animal * mon_animal; public: int main(void){ mon_animal = &Chat(); } };
Bien sur il existe la solution d'utiliser un std::vector mais si on se réfère à ce problème en particulier, il faudrait que j'appelle le destructeur de la classe dérivée avant qu'il ne soit appelé par défaut lors de la destruction de la classe l'utilisant (provoquant alors une fuite mémoire) ? je ne suis pas sur de comprendre l'origine du problème.
Merci pour votre aide!
Partager