怎么判断指针是游离的,还是指向一块具体内存的
如何判断指针是游离的,还是指向一块具体内存的?
如果我已经把已经指针delete了,再delete就会出错,所以我得判断指针究竟有没有被delete。我该怎么做啊?
------解决方案--------------------
如果我已经把已经指针delete了,再delete就会出错,所以我得判断指针究竟有没有被delete。我该怎么做啊?
------解决方案--------------------
- C/C++ code
if(p!=NULL) { delete p; p=NULL; }
------解决方案--------------------
------解决方案--------------------
sizeof(*p)不能这么用的
sizeof 基本上 是编译时候就已经确定了大小的,只能对变量或者类型使用。
------解决方案--------------------
可以参考管理指针的类,毫无疑问,给指针赋NULL最简练
------解决方案--------------------
确实啊,不用的指针就复制为0,是最好的办法,但是判断野指针野不是完全没有办法的,这个跟具体的编译器有关,
我是vs2005, 32bit。
调下面的函数返回0,就表示能delete,否则不能,但是不能保证%100准确率。
原因你知道的。
struct _CrtMemBlockHeader1
{
_CrtMemBlockHeader1 *pBlockHeaderNext, *pBlockHeaderPrev;
char* szFileName;
int nLine;
size_t nDataSize;
int nBlackUse ;
long lRequest;
unsigned char gap[4];
static int CheckBlockHeader(void* p)
{
if(!p)
return 1;
_CrtMemBlockHeader1* pRealHeader=(_CrtMemBlockHeader1*)((char *)p-sizeof(_CrtMemBlockHeader1));
if(pRealHeader->nDataSize<1)
return 1;
if(*((unsigned int*)&((pRealHeader->gap)[0]))!=0xFDFDFDFD )
return 1;
return 0;
}
};
------解决方案--------------------
smart pointer