Страницы

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

пятница, 20 декабря 2019 г.

Ошибка при освобождении памяти, но не при выходе за границы массива

#cpp #массивы


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

int main()
{
    int * p = new int[5];
    p[10] = 5;
    delete [] p;
}

    


Ответы

Ответ 1



Вы можете портить служебную информацию менеджера памяти, только и всего. В результате диспетчер памяти не в состоянии корректно освободить память, и система рушится. Неопределенное поведение - оно такое неопределенное :). Кстати, рекомендую книгу Безопасное программирование на C и C++ - там об этом (некорректной работе с памятью, которая может оказаться уязвимостью) много рассказывается.

Ответ 2



Потому что неопределенное поведение, которое возникает при записи вне пределов выделенной памяти может проявляться совершенно по-разному. В том числе и на более поздних операциях. В этом вся суть UB (Undefined Behaviour).

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

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