zoukankan      html  css  js  c++  java
  • 从使用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

     
  • 相关阅读:
    抓取国家地区基础数据
    h264
    h.264
    vlc 推送rtsp视频流不能播放
    花生壳tcp内网端口映射
    make 安装时指定目录
    ubuntu安装vsftpd
    vsftpd命令
    vim删除某一列
    linux打开防火墙
  • 原文地址:https://www.cnblogs.com/Arthurian/p/13547051.html
Copyright © 2011-2022 走看看