Maison >développement back-end >C++ >Que se passe-t-il lorsque vous allouez un tableau de taille nulle avec `new int[0]` en C ?

Que se passe-t-il lorsque vous allouez un tableau de taille nulle avec `new int[0]` en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 20:12:22730parcourir

What Happens When You Allocate a Zero-Sized Array with `new int[0]` in C  ?

Allocation de mémoire C avec new int[0]

Lors de l'allocation de mémoire avec le nouvel opérateur, une question courante se pose : que se passe-t-il lorsque le la taille du tableau demandée est nulle ?

Étonnamment, le code extrait :

cout << new int[0] << endl;

affiche une adresse, indiquant que la mémoire a été allouée. La norme C traite ce comportement :

Allocation et utilisation des tableaux vides

Comme indiqué dans 5.3.4/7 de la norme C, des tableaux de taille nulle peuvent être alloués mais leur utilisation n'est pas définie, selon 3.7.3.1/2.

Gestion des fichiers de taille zéro Tableaux

Même si la mémoire est allouée avec succès, il n'est pas garanti qu'elle puisse être déréférencée en toute sécurité. Il n'y a aucune garantie qu'il pointera vers une mémoire valide.

Conclusion

Bien qu'il soit permis d'allouer des tableaux vides avec new int[0], accéder ou modifier le la mémoire allouée a un comportement indéfini et doit être évitée. Toute mémoire allouée doit être supprimée à l'aide de delete, garantissant ainsi une libération appropriée des ressources.

Il est important de noter l'exigence standard pour l'opérateur new() de renvoyer un pointeur non nul même pour les requêtes de taille nulle, différente de la comportement de malloc(). Cependant, l'allocation réelle peut toujours échouer.

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