从使用delete释放指针导致程序崩溃看变量初始化
先来看下面的代码
bool FuncTest(LPCTSTR lpcProc) { bool bRet = false; ... if (CONDITION1) { goto FUNC_CLEAN; } char* pchX = new char[100]; ... FUNC_CLEAN: if (NULL != pchX) { delete[]pchX; pchX = NULL; } return bRet; }
乍一看,没有什么问题,但是程序偶发性崩溃了,分析dump信息发现dump中显示崩溃的点出现在delete的地方。而指针是通过new申请的,使用delete释放也没问题呀,而且delete之前做了空指针判断,按道理也不会有问题。
那么问题到底出在哪里呢?仔细观察发现中间使用了goto,如果满足了 【condition1】,那么就会直接跳转到函数最后做清理动作,而跳过了指针 pchX本身的初始化,pchX的实际指向也就成了未知,直接去delete就很容易发生崩溃。
作者:耑新新,发布于 博客园
转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com
本文来自博客园,作者:Arthurian,转载请注明原文链接:https://www.cnblogs.com/Arthurian/p/13547051.html
欢迎邮件交流:zhuanxinxin@aliyun.com