Maison >développement back-end >C++ >C `new int[0]` peut-il allouer de la mémoire vide, et si oui, quelles sont les implications ?

C `new int[0]` peut-il allouer de la mémoire vide, et si oui, quelles sont les implications ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 13:07:10272parcourir

Can C   `new int[0]` Allocate Empty Memory, and If So, What Are the Implications?

Coin de curiosité : allouer de la mémoire vide en C

Dans le domaine de la programmation C, une question intrigante se pose : pouvons-nous allouer de la mémoire à un bloc vide, représenté par new int[0].

Observations d'un test Application

Une simple application de test qui imprime le résultat de new int[0] révèle une sortie de 0x876c0b8, suggérant que la mémoire est effectivement allouée.

Plonger dans le Norme

La norme C fournit des conseils à ce sujet matière :

  • Tableaux de taille nulle : 5.3.4/7 indique qu'un nouveau déclarateur direct avec une valeur d'expression de zéro entraîne une allocation pour un tableau sans éléments.
  • Déréférencement non défini : 3.7.3.1/2 avertit que le déréférencement d'un pointeur renvoyé pour une requête de taille nulle a un comportement indéfini.

Considérations supplémentaires

  • Même avec une requête de taille nulle, l'allocation peut échouer.
  • Bien que l'allocation soit autorisée, le déréférencement de la mémoire renvoyée n'est pas légalement bien défini dans plates-formes.
  • Vous devez supprimer la mémoire allouée, même si elle a une taille nulle.

Foot-Note Insights

Un pied intéressant -la note de 3.7.3.1/2 révèle que l'intention est d'activer l'implémentation de l'opérateur new() en utilisant soit malloc() ou calloc(), qui se comportent de la même manière en ce qui concerne la taille nulle. demandes. Cependant, C diffère de C en exigeant une requête de taille nulle pour renvoyer un pointeur non nul.

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