做单片机项目的时候有一个需求要把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语言的指针果然深奥我还要继续研究 |