將delete
的所有指針重置爲NULL
不是責任。 另外你不應該改變windows DEBUG運行時的默認內存填充,你應該使用一些像boost::shared_ptr<>
這樣的指針。
這就是說,如果你真的想拍你自己在腳下你可以。
可以變化的默認通過使用分配器鉤這樣填寫爲Windows 調試運行時。這隻會在HEAP分配的對象上起作用!
int main(int argc,char** arv)
{
// Call first to register hook
_CrtSetAllocHook(&zero_fill);
// Do other stuff
malloc(100);
}
int zero_fill(int nAllocType,
void* pvData,
size_t nSize,
int nBlockUse,
long lRequest,
const unsigned char *szFileName,
int nLine)
{
/// Very Importaint !!
/// infinite recursion if this is removed !!
/// _CRT_BLOCK must not do any thing but return TRUE
/// even calling printf in the _CRT_BLOCK will cause
/// infinite recursion
if (nBlockUse == _CRT_BLOCK)
return(TRUE);
switch(nAllocType)
{
case _HOOK_ALLOC:
case _HOOK_REALLOC:
// zero initialize the allocated space.
memset(pvData,0,nSize);
break;
case _HOOK_FREE:
break;
}
return TRUE;
}
來源
2008-09-15 19:37:08
Ted
烏姆,刪除不設置指針反正爲NULL。如果你認爲它確實有 – 2009-01-24 08:34:51
的錯誤,那麼你的程序有一個錯誤,幾乎所有的刪除操作都應該後面跟着一行,它明確地將指針設置爲NULL。更好的是,更頻繁地使用智能指針。 – 2009-03-31 17:35:08
你說過「當我釋放它(通過刪除)時,它將指針設置爲0xFEEEFEEE」。你能澄清一下嗎?也許你的意思是*指向*的內存被設置爲0xFEEEFEEE?或者你真的認爲指針本身設置爲指向地址0xFEEEFEEE? – 2012-02-08 20:40:21