void ErrorProc() { printf("用户你好,我们的系统出错了,现在要退出"); } int main(int argc, char *argv[]) { //先给所有资源赋一个错误值,后面给每个资源赋正确值并验证确实正确,正确就使用,任意一个出错就调到总出口处理 char *pszA = NULL; char *pszB1 = NULL; char *pszB2 = NULL; char *pszC = NULL; char *pszD1 = NULL; char *pszD2 = NULL; pszA = (char *)malloc(10); if (pszA == NULL) { ErrorProc(); goto EXIT_LABEL;//相当于C++ throw } pszB1 = (char *)malloc(20); if (pszB1 == NULL) { ErrorProc(); goto EXIT_LABEL;//相当于C++ throw } pszB2 = (char *)malloc(30); if (pszB2 == NULL) { ErrorProc(); goto EXIT_LABEL;//相当于C++ throw } pszC = (char *)malloc(40); if (pszC == NULL) { ErrorProc(); goto EXIT_LABEL;//相当于C++ throw } if (argc > 3) { pszD1 = (char *)malloc(50); if (pszD1 == NULL) { ErrorProc(); goto EXIT_LABEL;//相当于C++ throw } } else { pszD2 = (char *)malloc(60); if (pszD2 == NULL) { ErrorProc(); goto EXIT_LABEL;//相当于C++ throw } } //能执行到这里,说明没有发生错误,可以正常使用资源了 strcpy(pszA, "A"); strcpy(pszB1, "B1"); strcpy(pszB2, "B2"); strcpy(pszC, "C"); EXIT_LABEL://相当于C++ catch if (pszA) { free(pszA); pszA = NULL;//释放后将引用资源的指针或变量赋值为NULL,后续错误引用时可触发异常(杜绝野指针) } if (pszB1) { free(pszB1); pszB1 = NULL; } if (pszB2) { free(pszB2); pszB2 = NULL; } if (pszC) { free(pszC); pszC = NULL; } if (pszD1) { free(pszD1); pszD1 = NULL; } if (pszD2) { free(pszD2); pszD2 = NULL; } return 0; }
原文链接: https://www.cnblogs.com/Nutshelln/p/12812439.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/345546
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!