Si vous êtes préoccupé par la mémoire, je recommande fortement d'apprendre à travailler avec Valgrind http://valgrind.org/. C'est un excellent outil. Valgrind divise les fuites de mémoire en 3 catégories:
- « définitivement perdu » - pointeur vers dynamiquement la mémoire allouée est perdue et il n'y a pas moyen de le récupérer
- « peut-être perdu » - pointeur vers la mémoire allouée dynamiquement pointe à l'intérieur d'un bloc et peut être sans rapport avec
- « encore accessible » - pointeur vers la mémoire allouée dynamiquement existe toujours, mais la mémoire n'a jamais été libéré à la fin des programmes d'exécution
Courir Valgrind est également très simple. Voici un lien vers le manuel d'utilisation http://valgrind.org/docs/manual/manual.html. Certains drapeaux utiles lors de l'exécution valgrind:
--leak-check=<no|summary|yes|full>
--show-reachable=<no|yes>
Maintenant, la façon dont je supprimer un nœud dans une liste doublement liée est:
// if the node to be removed is the head node
if (nodeToRemove->prev == NULL) {
// reassign the head node pointer
start_ptr = nodeToRemove->next;
} else {
// correct previous node pointer
nodeToRemove->prev->next = nodeToRemove->next;
}
// if the node to be removed node is the tail node
if (nodeToRemove->next == NULL) {
// reassign the tail node pointer
end_ptr = nodeToRemove->prev;
} else {
// correct next node pointer
nodeToRemove->next->prev = nodeToRemove->prev;
}
// deallocate memory
delete(nodeToRemove);
nodeToRemove = NULL;
simplement déclarer node *end_ptr = NULL;
après avoir déclaré start_ptr
et lorsque vous ajoutez un nœud à la liste, assurez-vous que le paramètre end_ptr pointe toujours vers la fin de la liste ... et si vous ajoutez à la fin de la liste, c'est facile ... pointez simplement le end_ptr vers le noeud ajouté.
Vous pourriez aussi bien garder un pointeur de queue, si vous devez toujours supprimer le dernier noeud. Donc, une fois que vous avez le nœud que vous voulez supprimer, je vérifie simplement s'il s'agit du nœud tête/queue, réaffecte les pointeurs suivant/préc, et libère la mémoire.
Btw ... J'ai pris cela de mon implémentation C, donc si la syntaxe est désactivée je m'excuse ... mais la logique est là.
Espérons que ça aide.
Est-ce ce devoir? – Karmastan
Je suppose que c'est devoirs? S'il vous plaît ajouter l'étiquette de devoirs, si c'est le cas. – pmr