Maison > développement back-end > C++ > `delete ptr` vs `delete[] ptr` : pourquoi l'un est-il sûr et l'autre une fuite de mémoire ?

`delete ptr` vs `delete[] ptr` : pourquoi l'un est-il sûr et l'autre une fuite de mémoire ?

DDD
Libérer: 2025-01-03 08:15:40
original
124 Les gens l'ont consulté

`delete ptr` vs. `delete[] ptr`: Why is One Safe and the Other a Memory Leak?

La suppression d'un tableau avec delete est-elle équivalente à delete[] ?

Lorsqu'il s'agit de tableaux dynamiques, il est crucial de comprendre la différence entre la suppression éléments individuels avec delete et suppression de l'ensemble du tableau avec delete[].

Pourquoi supprimer ptr peut provoquer un résultat indéfini Comportement

Dans le code fourni :

IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];
Copier après la connexion

ptr pointe vers un tableau de 100 structures IP_ADAPTER_INFO. Supprimer le pointeur avec delete ptr équivaut à supprimer le premier élément du tableau. Toutefois, cela laisse les 99 éléments restants alloués. Cela peut entraîner une fuite de mémoire.

Analyse du code de désassemblage

Le code de désassemblage généré par Visual Studio 2005 pour delete ptr et delete []ptr démontre clairement la différence :

  • delete ptr : libère uniquement la mémoire pointée par ptr (le premier element).
  • delete []ptr : appelle l'opérateur delete[] qui désalloue correctement l'ensemble du tableau.

Conclusion

À éviter comportement indéfini et évitez les fuites de mémoire, utilisez toujours delete []ptr pour libérer les tableaux alloués dynamiquement avec new. Bien que certains compilateurs puissent gérer delete ptr avec élégance, il s'agit d'une pratique peu fiable et doit être évitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal