Maison >développement back-end >C++ >Est-il sûr d'appeler « delete » sur une variable allouée à la pile en C ?
Pouvez-vous appeler en toute sécurité Supprimer sur une variable allouée par la pile ?
Dans le domaine de la programmation C, il est crucial de comprendre les nuances de la mémoire associé à l'allocation de variables sur la pile ou le tas. Bien que le style et la conception de la programmation doivent être pris en compte, il est essentiel de répondre à une question fondamentale : est-il permis d'appeler delete sur une variable allouée sur la pile ?
Examen du problème
Considérez les extraits de code suivants :
int nAmount; delete &nAmount;
class sample { public: sample(); ~sample() { delete &nAmount; } int nAmount; };
La sécurité Problème
La réponse à la question est un non catégorique. L'appel de delete sur une variable allouée par la pile n'est pas sûr et doit être évité.
Principes d'allocation de mémoire
Pour comprendre pourquoi, il est important de saisir les principes d'allocation de mémoire . Pour chaque :
Mélange illégal
Le mélange de ces méthodes d'allocation est strictement interdit. Tenter de libérer ou de supprimer[] un objet alloué avec new entraînera un comportement indéfini. Il en va de même pour l'appel de delete sur une variable allouée par la pile.
Conséquences de la suppression
Lors de l'appel de delete sur une variable allouée par la pile, le compilateur peut effectuer une optimisation , comme l'élision, en supposant que l'objet n'est pas utilisé une fois hors de portée. Cependant, appeler explicitement delete sur une telle variable peut entraîner :
Conclusion
Pour maintenir l'intégrité de la mémoire et éviter des comportements indéfinis, il est essentiel de respecter les principes d'allocation de mémoire. Évitez d'appeler delete sur les variables allouées par la pile et respectez les paires d'allocation et de désallocation appropriées : malloc/free, new/delete et new[]/delete[].
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!