Страницы

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

пятница, 2 ноября 2018 г.

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

Когда захожу за границу массива, то не получаю ошибку, но если пытаюсь удалить по указателю, то программа падает. Почему?
int main() { int * p = new int[5]; p[10] = 5; delete [] p; }


Ответ

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

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

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