Les tableaux vides peuvent-ils être alloués en C à l'aide de "new int[0]" ?
En C, l'utilisation d'un nouvel opérateur pour allouer la mémoire est souvent utilisée. Cependant, une question se pose concernant l'allocation de tableaux vides à l'aide de new int[0]. Ce code alloue-t-il de la mémoire, et que précise la norme à ce sujet ?
Perspective standard
Selon 5.3.4/7 de la norme C, lorsque le direct -l'expression new-declarator est évaluée à zéro, la fonction d'allocation attribue un tableau sans élément. Néanmoins, 3.7.3.1/2 souligne que le déréférencement d'un pointeur résultant d'une requête de taille nulle conduit à un comportement indéfini.
En pratique
Malgré la tolérance de la norme pour En allouant des tableaux vides, il prévient que cette opération peut toujours échouer. Par conséquent, on ne peut transmettre en toute sécurité la mémoire allouée à la suppression du tableau pour désallocation, évitant ainsi tout accès direct à la mémoire.
Note spéciale
Une note de bas de page dans la norme suggère que le le comportement imite l'approche de malloc() ou calloc() en C, où une requête nulle renvoie un pointeur non nul. Cet écart par rapport à C garantit l'interopérabilité entre les plates-formes et permet l'allocation de tableaux vides en C.
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!