结构体内存回收问题请教
我定义了一个结构体,程序具体如下:
#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;
}
}