为什么在函数中释放指针,并指向NULL,在被main调用后,返回结果并不指向NULL?解决办法
为什么在函数中释放指针,并指向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中分配的,这样理解上也更容易些,谁分配谁负责释放 多好啊 :)
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中分配的,这样理解上也更容易些,谁分配谁负责释放 多好啊 :)