Страницы

Поиск по вопросам

суббота, 6 октября 2018 г.

Доступ к памяти из кучи после её освобождения

Почему не ловлю ошибку сегментирования в этом случае?
#include
int main(int argc, char* argv[]) { int* ptr = new int(47);
std::cout << ptr << " " << *ptr << std::endl;
/* Память выделенная в heap'e должна вернуться системе. Или она будет доступна программе до окончания области видимости указателя ? */ delete ptr;
*ptr = 74;
std::cout << ptr << " " << *ptr << std::endl; }


Ответ

Разименовывание невалидного указателя приводит к неопределенному поведению - так на C++ писать нельзя.
"Неопределенное поведение" вовсе не означает, что программа выпадет с ошибкой. В таком состоянии, программа может делать все что угодно, в том числе и работать так, как этого хочет программист.
Допускать неопределенное поведение в программе запрещено.

Комментариев нет:

Отправить комментарий