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