Maison > développement back-end > C++ > Quand dois-je utiliser `delete ptr` ou `delete[] ptr` en C ?

Quand dois-je utiliser `delete ptr` ou `delete[] ptr` en C ?

DDD
Libérer: 2024-12-29 03:28:14
original
273 Les gens l'ont consulté

When Should I Use `delete ptr` vs. `delete[] ptr` in C  ?

La syntaxe delete ptr est-elle équivalente à delete[] ptr ?

Les différences entre delete et delete[] peuvent sembler subtiles, mais elles sont cruciaux pour la gestion de la mémoire en C .

Considérez le code suivant extrait :

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

Ce code alloue un tableau de 100 structures IP_ADAPTER_INFO en utilisant new. Pour libérer cette mémoire, nous devons utiliser la syntaxe de suppression appropriée.

Utilisation de delete ptr :

delete ptr;
Copier après la connexion

Cette syntaxe est incorrecte. ptr pointe vers un tableau d'objets, il doit donc être supprimé à l'aide de delete[]. Ne pas le faire entraîne un comportement indéfini, qui peut entraîner des fuites de mémoire ou d'autres conséquences imprévisibles.

Utilisation de delete[] ptr :

delete[] ptr;
Copier après la connexion

Cette syntaxe est correct. delete[] est utilisé pour libérer les tableaux. Il invoquera le destructeur approprié pour chaque élément du tableau et libérera la mémoire allouée à l'ensemble du tableau.

Analyse du code de désassemblage :

Le code de désassemblage fourni démontre le différence entre delete ptr et delete[] ptr.

Pour delete ptr, un seul appel à l'opérateur delete est effectué, indiquant qu'il tente de supprimer un objet unique.

Pour delete[] ptr, un appel à l'opérateur delete[] est effectué, indiquant qu'il tente de supprimer un tableau d'objets.

Conclusion :

Pour éviter les fuites de mémoire et les comportements indéfinis, il est crucial d'utiliser la syntaxe de suppression correcte pour les tableaux. delete ptr doit être utilisé pour supprimer des objets uniques, tandis que delete[] ptr doit être utilisé pour supprimer des tableaux.

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