Адрес указателя после delete
if(NULL != massiv) программа считает, что массив существует. Как это обойти?
Цитата: Karrde
if(NULL != massiv) программа считает, что массив существует. Как это обойти?
Принудительным обнулением указателя после удаления блока памяти, не иначе.
[COLOR="Gray"]Что там еще... Умные указатели, переопределение самого оператора, хотя это не факт, т.к. вряд ли удастся втюхать в ф-ю глобального оператора delete[] указатель на блок памяти по ссылке, или как там у вас в С++ :)[/COLOR]
http://www.sql.ru/forum/actualthread.aspx?tid=285187
Только руцями :(
Аналогичная проблема -
Только руцями :(
В общем случае, не существует такой возможности проверить, указывает ли указатель на выделенную область памяти или нет.
Хмм. а если проверить, например, существование 1-го элемента массива. это будет корректно?
Цитата: Karrde
Хмм. а если проверить, например, существование 1-го элемента массива. это будет корректно?
Нет. Даже если вы уже освободили память в лучшем случае (и скорее) ничего не произойдет и проверка "покажет" что элемент есть, в худшем (очень наврядли) получить какой нибудь exception.
Еще в догонку, для проверки "читабельности" указателя есть IsBadWritePtr() IsBadReadPtr() и еще несколько isBadXXX();
Инвариант, инвариант...