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];
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 :
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!