c语言函数封装 封装free函数遇到的问题
封装free函数遇到的问题
做单片机项目的时候 有一个需求要把C库的free函数封装一下 形如MMFree这样的名字 这样就可以在里面添加调试信息以便输出 可是 唉 我想简单了 我这样设计的
[cpp]
void MXFreeP(void* p)
{
free(p)
p = NULL;
}
int main(int argc char** argv)
{
char* p = NULL;
p = (char*)malloc( )
if(NULL != p)
{
*p = x ;
}
MXFreeP(p)
if(NULL == p)
{
printf( p == NULLn )
}
else
{
printf( p != NULLn ) //运行后 输出这个
}
system( pause )
return ;
}
结果 系统崩溃了 回来之后我在PC上照这样写了一下 虽然程序没有崩溃 不过指针指向的内容没有被释放 我想起了以前遇到的指针作为函数参数的问题 明白了 得传二维指针啊
修改后
[cpp]
void MXFreePP(void** p)
{
free(*p)
*p = NULL;
}
int main(int argc char** argv)
{
char* p = NULL;
p = (char*)malloc( )
if(NULL != p)
{
*p = x ;
}
MXFreePP((void**)&p)
if(NULL == p)
{
printf( p == NULLn ) //运行后输出这个
}
else
{
printf( p != NULLn )

}
system( pause )
return ;
}
终于得到期望的结果了 不过要使用这个函数的话 还必须得到指针的二维指针 麻烦啊 如果在函数内部取的话 又因为是值拷贝 取得的二维指针不是原来的二维指针 我想了很久 还是用宏吧
[cpp]
#define MXFreePP(p) free((void*(p))) ;
printf( I have been freed n )
lishixinzhi/Article/program/Java/hx/201311/25832