怎么判断指针是游离的,还是指向一块具体内存的

如何判断指针是游离的,还是指向一块具体内存的?
如果我已经把已经指针delete了,再delete就会出错,所以我得判断指针究竟有没有被delete。我该怎么做啊?

------解决方案--------------------

C/C++ code

if(p!=NULL)
{
    delete p;
    p=NULL;
}

------解决方案--------------------
探讨

引用:
C/C++ code

if(p!=NULL)
{
delete p;
p=NULL;
}

嗯,谢谢,这是一种方法。但是按道理说,delete p之后, sizeof(*p)应该发生变化了,能不能用这个判断?
我messagebox(sizeof(*p)),得到的却不是我想要的结果

------解决方案--------------------
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