@miles : On voulant te répondre, j'ai revu la fonction add de la class Stash, et j'ai enfin compris mon erreur et compris ce qui s'est passé, je m'explique :
1- La classe Stash n'est qu'un tableau de char, dont on spécifie la taille du type qu'elle est sensé stocker a l'initialisation. Et la fonction add
int Stash::add(const void* element)
prend donc un pointeur vers l'élément qu'on veut ajouter. Or moi qui voulais stocké un pointeur vers un string je n'envoyais qu'un...pointeur vers un string alors qu'il fallait envoyer un pointeur vers un pointeur de string. Même chose pour la valeur a retourner. Donc la version corrigée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| void main(int argc, char* argv[])
{
ifstream in("main.cpp");
Stash tabDyn;
tabDyn.initialize(sizeof(string*));
//Fichier->Stash
string line;
while(getline(in, line))
{
string *tempLine = new string(line);
tabDyn.add(&tempLine);
}
//Affichage du fichier
string *ligne;
for(int i = 0; i < tabDyn.count(); i++)
{
ligne = *((string**) tabDyn.fetch(i));
cout << *ligne << endl;
delete ligne;
}
tabDyn.cleanup();;
} |
Donc pour répondre a miles, non tabDyn.cleanup() ne fais pas tout, car, et ça tu ne pouvais pas le savoir :
1 2 3 4 5 6
| void Stash::cleanup() {
if(storage != 0) {
//cout << "freeing storage" << endl;
delete []storage;
}
} ///:~ |
Elle ne fais que supprimer le tableau de char qui stockait les éléments.
Maintenant que c'était il passé avant, et bien tout simplement en envoyant un pointeur vers un string, l'élément copié dans le tableau était le string, qui, et je viens de le remarquer ne tient que sur 4 octet et qui est donc un genre de référence vers la vrai structure stockée quelque part dans la mémoire. Donc j'avais apparement la même valeur que maintenant suaf que le delete ne marchais pas avant vu qu'on ne supprimé pas avant un vrai pointeur (en tout cas pas déclaré en tant que tel).
Je sais pas si vous comprenez 
Si je me suis trompé n'hésitez pas.
En tout cas Merci miles.
Partager