首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体内存回收有关问题请问

2012-03-04 
结构体内存回收问题请教我定义了一个结构体,程序具体如下:#includefunction.h voidmain(){A*p;pApplyFu

结构体内存回收问题请教
我定义了一个结构体,程序具体如下:

#include   "function.h "

void   main()
{
  A*   p;
  p   =   ApplyFunction();
  ReleaseFunction(p);
}

问题是我在函数体中已经进行内存回收了,并将指针赋予NULL,可为什么   p   还有地址信息,按理来说,它地址应该是0x0000,可实际中它还是以前的地址。请问是怎么回事啊????如何才能让返回的地址为0x0000啊????

function.h文中的代码:

#include   "stdlib.h "
#include   "stdio.h "

typedef   struct   _A
{
      int   m;
      float   *C;
}A;
//   函数申明
A*   ApplyFunction(void);
void   ReleaseFunction(A   *pp);


//函数体定义
function.cpp文件中的代码:

A*   ApplyFunction(void)
{
A*   pp;
pp   =   (A*)malloc(sizeof(A));
pp-> m   =   20;
pp-> C   =   (float   *)   malloc(sizeof(float)   *   pp-> m);
if(pp-> C)
{
memset(pp-> C,   0,   sizeof(float)*pp-> m);
}else
{
printf( "can   not   allocate   memory ");
}
return   pp;

}

void   ReleaseFunction(A   *pp)
{
if(pp)
{
if(pp-> C)
    free(pp-> C);
free(pp);
pp   =   NULL;
}
}



[解决办法]

void ReleaseFunction(A** pp)
{
if(*pp)
{
if(*pp-> C)
free((*pp)-> C);
free(*pp);
*pp = NULL;
}
}

热点排行