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