本文共 912 字,大约阅读时间需要 3 分钟。
函数只有一个出口,不允许中间return、break、continue
void Func(void){ char* p1 = null; char* p2 = null; char* p3 = null; p1 = (char*)malloc(10);//p1已经分配,必须释放 if(!p1) return; p2 = (char*)malloc(10); if(!p2) { free(p1); p1 = null;//由于p2分配失败,必须释放p1 return; } p3 = (char*)malloc(10);//p3已经分配,必须释放 if(!p3) { free(p1); p1 = null;//由于p2分配失败,必须释放p1和p2 free(p2); p2 = null; return; } //... //函数结束时,还要书写释放代码 if(p1) { free(p1); p1 = null; } if(p2) { free(p2); p2 = null; } if(p3) { free(p3); p3 = null; }}
换成goto
void Func(void){ char* p1 = null; char* p2 = null; char* p3 = null; p1 = (char*)malloc(10); if(!p1) goto Func_End_Process; p2 = (char*)malloc(10); if(!p2) goto Func_End_Process; p3 = (char*)malloc(10); if(!p3) goto Func_End_Process; Func_End_Process: if(p1) { free(p1); p1 = null; } if(p2) { free(p2); p2 = null; } if(p3) { free(p3); p3 = null; }}
本文摘自《0 bug:C/C++商用工程之道》 肖舸 著
转载地址:http://qaejx.baihongyu.com/