首先声明一个指针变量*p,那么free(p);与p=NULL;这两个语句有什么区别?
有区别,free(p);是将p所指向的空间释放掉,这个空间可以是任何类型的变量或者数组。
而p=NULL;是将p自身的值赋空,其实相当于释放自身。
例如数据结构中销毁顺序表的算法是这样的
void Destroy_SeqList(PSeqList*PL);
{
free(*PL);
*PL=NULL;
}
其中PL是顺序表的指针
调用语句为
Destroy_SeqList(&PL);
这样销毁才彻底。
否则的话不但是不彻底,有些操作中还会出错。
例如销毁后不小心再次调用到了PL,系统仍然能通过PL找到整个顺序表,再次对顺序表进行操作,这样就会出错。