Maison >développement back-end >C++ >Que se passe-t-il lorsque vous utilisez `new[]` avec une taille nulle en C ?

Que se passe-t-il lorsque vous utilisez `new[]` avec une taille nulle en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 16:26:10555parcourir

What Happens When You Use `new[]` with a Size of Zero in C  ?

Allocation de mémoire avec C new[0]

En C , l'opérateur new[] permet l'allocation de mémoire dynamique. Cependant, que se passe-t-il lorsque la taille du tableau spécifiée dans l’appel de l’opérateur est nulle ? Une simple sortie du programme de test suggère que la mémoire semble être allouée.

Définition standard

Selon la norme C, en 5.3.4/7 :

"Lorsque la valeur de l'expression dans un nouveau déclarateur direct est nulle, la fonction d'allocation est appelée pour allouer un tableau sans éléments."

Comportement non défini

Cependant, il est important de noter que 3.7.3.1/2 indique :

"L'effet du déréférencement d'un le pointeur renvoyé car une demande de taille nulle n'est pas défini. "

Cela signifie que même s'il est techniquement possible d'attribuer un tableau vide avec new[], accédant ou modifiant la mémoire vers laquelle il pointe a un comportement indéfini.

Échecs d'allocation

De plus, la norme mentionne que même pour une taille nulle demandes, l'allocation peut encore échouer.

Implications

En pratique, cela signifie que :

  • Vous pouvez allouer des tableaux vides en utilisant new[].
  • Vous ne devez pas déréférencer le pointeur renvoyé.
  • Vous devez supprimer la mémoire allouée, même s'il a zéro size.

Foot-Note

La norme comprend une note de bas de page indiquant que l'intention est de permettre à new[] d'être implémenté à l'aide de fonctions comme malloc () ou calloc(), qui renvoient également des pointeurs non nuls pour les requêtes de taille nulle.

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!

Déclaration:
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