读书人

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

发布时间: 2012-03-04 11:13:33 作者: rapoo

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

#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;
}
}

读书人网 >C语言

热点推荐