Почему не ловлю ошибку сегментирования в этом случае?
#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++ писать нельзя.
"Неопределенное поведение" вовсе не означает, что программа выпадет с ошибкой. В таком состоянии, программа может делать все что угодно, в том числе и работать так, как этого хочет программист.
Допускать неопределенное поведение в программе запрещено.
Комментариев нет:
Отправить комментарий