读书人

为什么在函数中释放指针并指向NULL

发布时间: 2012-04-05 12:42:40 作者: rapoo

为什么在函数中释放指针,并指向NULL,在被main调用后,返回结果并不指向NULL?
struct bayesnetwork
{
struct feanode *fealist;/* 指向表头向量(数组) */
int feanum, arcnum;/* 贝叶斯网络的当前顶点数和弧数 */
}bayesnetwork;

void freenb(struct bayesnetwork *nb)
{
free(nb);
nb=NULL;
if(!nb)
printf( "In freenb function nb is null.\n ");
else
printf( "In freenb function nb is not null.\n ");
}
int main()
{
struct bayesnetwork *nb;
nb=(struct bayesnetwork *)malloc(sizeof(struct bayesnetwork));
assert(nb!=NULL);
nb-> fealist=NULL;
nb-> feanum=42;
nb-> arcnum=0;
freenb(nb);
if(!nb)
printf( "In main function nb is null.\n ");
else
printf( "In main functionnb is not null.\n ");
system( "PAUSE ");
return 0;
}

运行的结果却是:

In freenb function nb is null.
In main functionnb is not null.

我觉得结果应该是:

In freenb function nb is null.
In main functionnb is null.

这是为什么呢?

[解决办法]
因为参数值你不能更改,需要用指针的指针;
不知道C中有没有指针的引用这种形式.
[解决办法]
void freenb(struct bayesnetwork **nb)
{
free(*nb);
(*nb)=NULL;
if(!(*nb))
printf( "In freenb function nb is null.\n ");
else
printf( "In freenb function nb is not null.\n ");
}


..


main


freenb(&nb);
[解决办法]
形参不能被修改! C中没有引用这一说阿
另外觉得你还是在main函数内释放更好些吧,因为你是在main中分配的,这样理解上也更容易些,谁分配谁负责释放 多好啊 :)

读书人网 >C语言

热点推荐