从使用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

posted on 2020-08-22 20:58  Arthurian  阅读(1100)  评论(0编辑  收藏  举报