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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM