«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Законно ли использование указателя после удаления объекта, на который он указывает, в C++?

Законно ли использование указателя после удаления объекта, на который он указывает, в C++?

Опубликовано 10 ноября 2024 г.
Просматривать:237

Is Using a Pointer After Deleting the Object It Points to in C   Legal?

Указатели в C после удаления

В C управление памятью имеет решающее значение, и одним из ключевых аспектов является обработка указателей после удаления объекта. Следующий код вызывает вопросы о достоверности указателя после удаления:

A* a = new A();
A* b = a;

delete a;

A* c = a; // illegal in C  11
A* d = b; // is it legal?

Понимание действительности указателя после удаления

Согласно стандарту C, обращение к хранилищу, на которое указывает указатель, после удаления соответствующего объекта не определено и может привести к непредсказуемому поведению. Это относится как к исходному указателю (в данном случае a), так и к копиям этого указателя (b).

В C 11 доступ к значению a или b после удаления a является неопределенным поведением. Стандарт C 14 поясняет это поведение, заявляя, что оба действия имеют поведение, определяемое реализацией. Это означает, что результат зависит от конкретной реализации компилятора или среды выполнения.

Поведение, определяемое реализацией

Как упоминалось ранее, C 14 допускает использование недопустимых указателей ( включая копии удаленных указателей), чтобы иметь поведение, определяемое реализацией. Это означает, что разные компиляторы или операционные системы могут обрабатывать эти ситуации по-разному.

Некоторые реализации могут генерировать сгенерированную системой ошибку времени выполнения, в то время как другие могут демонстрировать непредсказуемое поведение или завершать программу. Поэтому важно избегать использования указателей, которые ссылаются на удаленные объекты, включая копии этих указателей.

Заключение

Подводя итог, доступ к значению указателя (или его копии) после удаления связанного объекта является опасным и может привести к неопределенному или определяемому реализацией поведению. Крайне важно гарантировать, что указатели всегда указывают на допустимые объекты, и правильно управлять памятью, чтобы предотвратить такие проблемы.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3