电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

封装free函数遇到的问题


发布日期:2018/4/4
 

做单片机项目的时候有一个需求要把C库的free函数封装一下形如MMFree这样的名字这样就可以在里面添加调试信息以便输出可是我想简单了我这样设计的

[cpp]

void MXFreeP(void* p)

{

free(p)

p = NULL;

}

int main(int argcchar** argv)

{

char* p = NULL;

p = (char*)malloc(

if(NULL != p)

{

*p = x;

}

MXFreeP(p)

if(NULL == p)

{

printf(p == NULL\n

}

else

{

printf(p != NULL\n //运行后输出这个

}

system(pause

return ;

}

结果系统崩溃了回来之后我在PC上照这样写了一下虽然程序没有崩溃不过指针指向的内容没有被释放我想起了以前遇到的指针作为函数参数的问题明白了得传二维指针啊

修改后

[cpp]

void MXFreePP(void** p)

{

free(*p)

*p = NULL;

}

int main(int argcchar** argv)

{

char* p = NULL;

p = (char*)malloc(

if(NULL != p)

{

*p = x;

}

MXFreePP((void**)&p)

if(NULL == p)

{

printf(p == NULL\n //运行后输出这个

}

else

{

printf(p != NULL\n

}

system(pause

return ;

}

终于得到期望的结果了不过要使用这个函数的话还必须得到指针的二维指针麻烦啊如果在函数内部取的话又因为是值拷贝取得的二维指针不是原来的二维指针我想了很久还是用宏吧

[cpp]

#define MXFreePP(p) free((void*(p))) ; \

printf(I have been freed\n

C语言的指针果然深奥我还要继续研究

上一篇:判断流程开始节点是否能连通到结束节点

下一篇:JBuilder2005实现重构之类内部提炼