J'ai un problème avec delete et destructor (je suis sûr que je fais une erreur stupide ici, mais je n'ai pas encore réussi à le comprendre).C++ supprimer ne fonctionne pas?
Lorsque j'interviens dans le destructeur et que j'essaie d'appeler la suppression sur un pointeur, le message s'affiche "Impossible d'accéder à la mémoire à l'adresse une adresse."
Le code correspondant est:
/*
* Removes the front item of the linked list and returns the value stored
* in that node.
*
* TODO - Throws an exception if the list is empty
*/
std::string LinkedList::RemoveFront()
{
LinkedListNode *n = pHead->GetNext(); // the node we are removing
std::string rtnData = n->GetData(); // the data to return
// un-hook the node from the linked list
pHead->SetNext(n->GetNext());
n->GetNext()->SetPrev(pHead);
// delete the node
delete n;
n=0;
size--;
return rtnData;
}
et
/*
* Destructor for a linked node.
*
* Deletes all the dynamically allocated memory, and sets those pointers to 0.
*/
LinkedListNode::~LinkedListNode()
{
delete pNext; // This is where the error pops up
delete pPrev;
pNext=0;
pPrev=0;
}
Les nœuds suivants et précédents stockés dans le nœud actuel (chaque nœud contient des données de chaîne, et un pointeur vers les nœuds suivant et précédent dans la liste). C'est le comportement souhaité, car nous avons décroché ce nœud de la liste chaînée, et maintenant je veux retourner toute la mémoire dynamiquement allouée EDIT - attendez, je pense voir ce que vous dites .. – vimalloc
@kyeana: vous ne voulez que retourner la mémoire associée au seul nœud que vous supprimez –
C'est pire que cela - cela effacera en fait jusqu'à la fin de la liste (récursif à la première suppression) et ensuite tentera de supprimer l'avant-dernier nœud de nouveau à l'intérieur du destructeur du dernier nœud, ce qui est probablement le cas de l'accident. Si X, Y et Z sont les trois derniers nœuds, ~ X supprime Y, ~ Y supprime Z, et ~ Z supprime à nouveau Y. –