Maison > développement back-end > C++ > La suppression d'un pointeur `void*` avec `delete[]` est-elle sûre en C ?

La suppression d'un pointeur `void*` avec `delete[]` est-elle sûre en C ?

DDD
Libérer: 2024-12-05 15:00:18
original
935 Les gens l'ont consulté

Is Deleting a `void*` Pointer with `delete[]` Safe in C  ?

Suppression de pointeurs vides : une évaluation de la sécurité

Considérez l'extrait de code suivant :

void* my_alloc(size_t size) {
  return new char[size];
}

void my_free(void* ptr) {
  delete[] ptr;
}
Copier après la connexion

Est-il sécuritaire de supprimer un pointeur alloué en tant que pointeur void* en utilisant le delete[] opérateur ?

Réponse :

La suppression d'un pointeur via un void* n'est explicitement pas définie par la norme C. La section 5.3.5/3 indique :

Dans la première alternative (supprimer l'objet), si le type statique de l'opérande est différent de son type dynamique, le type statique doit être une classe de base du type dynamique de l'opérande. et le type statique doit avoir un destructeur virtuel ou le comportement n'est pas défini. Dans la deuxième alternative (supprimer le tableau), si le type dynamique de l'objet à supprimer diffère de son type statique, le comportement est indéfini.

De plus, la note de bas de page note :

Cela implique qu'un objet ne peut pas être supprimé à l'aide d'un pointeur de type void* car il n'y a pas d'objet de type void.

Conclusion :

Il est dangereux de supprimer un pointeur alloué en tant que void* à l'aide de l'opérateur delete[]. Convertissez toujours le pointeur vers son type d'origine avant de le supprimer.

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