Можно ли почистить испорченную кучу? - PullRequest
0 голосов
/ 03 марта 2019

Если я испорчу свою кучу, могу ли я ее потом почистить?Если да, то как?

Пример повреждения кучи:

int *x = new int; // If we allocate memory wit new, we have to free it later.. 
x++;
*x = 1; // the heap is now corrupted

Однако вызов free(x), delete x и т. Д. Приведет к сбою кода выше.Может ли память все-таки быть освобождена или она уже сломана без надежды?

1 Ответ

0 голосов
/ 03 марта 2019

Если я испорчу свою кучу, могу ли я ее потом почистить?

Нет, вы не можете это исправить.В основном ваша программа имеет неопределенное поведение . повреждение кучи - это то, что обнаруживается некоторыми инструментами-дезинфицирующими средствами, запускающими ваш код в режиме отладки.

Нет способа отменить *x = 1; или восстановить значение, которое находилось там ранее.


Однако вызов free (x), удаление x и т. Д. Приведут к сбою над кодом.

Конечно, вы пытаетесь освободить то, что никогда не выделялось.

Может ли память все еще каким-то образом быть освобождена или она уже сломана без надежды?

Она сломана без всякой надежды.

...