为什么在函数中释放指针,并指向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中分配的,这样理解上也更容易些,谁分配谁负责释放 多好啊 :)