Bonjour !!!
Voilà. Je récupère un pointeur sur un vecteur de "command", qui correspond à un vecteur de pointeurs sur des instances de classe "command".
voici la redéfinition du tableau de pointeurs, ainsi que le proto de la méthode appelée, qui me retourne ce fameux pointeur sur un vecteur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 typedef vector< command* > v_commands; v_commands* parseFragment( string xmlFragment );
Chaque pointeur du vecteur pointe sur une instance de "command" qui a été créée avec l'opérateur new avant d'être insérée dans le tableau.
Je pars donc du principe que si j'ai utilisé "new", il faut donc que je fasse un "delete" pour éviter les fuites mémoires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 v_commands* aCommands = new v_commands; for( ... ) { command* cmd = new command(); // ajout du pointeur de "cmd" dans le vecteur (*aCommands).push_back( cmd ); }
Après le traitement de mon vecteur, j'aimerai donc faire un delete sur chaque élément, afin de libérer la mémoire allouée pour le processus.
J'ai donc créé une méthode comme suivant :
A laquelle je passe le pointeur sur mon vecteur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void DesallocCommands( v_commands* cmds ) { for( int i = (*cmds).size(); i > 0; i-- ) delete (*(*cmds).at(i)); (*cmds).clear(); }
Je pensais ensuite pouvoir déréférencer tout d'abord le vecteur
(*cmds)
puis récupérer le pointeur à l'index i
(*cmds).at(i)
et enfin, déréférencer ce dernier
(*(*cmds).at(i))
pour appliquer un delete dessus, ce qui me semble logique, pour atteindre le réel élément en mémoire et non pas son pointeur ou autre chose... Mais non, ma console plante lamentablement...
J'ai tenté plusieurs recherches sur le forum, j'ai lu dans la FAQ le chapitre sur les destructeurs, mais il doit me manquer un élément... C'est surement tout con, mais je n'arrive pas à trouver...
Si quelqu'un détecte l'erreur, je lui en serai reconnaissant
D'avance merci.
Partager