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!