#cpp #массивы
Когда захожу за границу массива, то не получаю ошибку, но если пытаюсь удалить по
указателю, то программа падает. Почему?
int main()
{
int * p = new int[5];
p[10] = 5;
delete [] p;
}
Ответы
Ответ 1
Вы можете портить служебную информацию менеджера памяти, только и всего. В результате диспетчер памяти не в состоянии корректно освободить память, и система рушится. Неопределенное поведение - оно такое неопределенное :). Кстати, рекомендую книгу Безопасное программирование на C и C++ - там об этом (некорректной работе с памятью, которая может оказаться уязвимостью) много рассказывается.Ответ 2
Потому что неопределенное поведение, которое возникает при записи вне пределов выделенной памяти может проявляться совершенно по-разному. В том числе и на более поздних операциях. В этом вся суть UB (Undefined Behaviour).
Комментариев нет:
Отправить комментарий