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

     
  • 相关阅读:
    sql语句技巧
    逻辑查询处理的步骤
    left join 和 left outer join的区别
    SQL 笛卡尔积
    SQL 分类
    显示数据库中的表
    数据库备份 恢复
    增删主键及修改表名
    Securing Data笔记
    System Monitoring之"文件系统"
  • 原文地址:https://www.cnblogs.com/Arthurian/p/13547051.html
Copyright © 2011-2022 走看看