zoukankan      html  css  js  c++  java
  • 非空判断

    今天调查内存泄漏,发现一块申请的堆未释放,于是加了一段释放代码
    if(!pbuffer)
    {
        TaskMemFree(pbuffer);
    }

    运行程序,发现仍然泄漏,继续检查其余代码,没发现问题,正在郁闷中,发现单步调试不能走到
    释放代码内部,一看条件判断,晕!写了个无效代码,pbuffer为空时才会执行释放操作,改为
    if(pbuffer)
    {
        TaskMemFree(pbuffer);
    }

    问题解决!
    看来写代码时显示判断还是保险些啊,如果当初写成
    if(pbuffer != NULL)
    {
        TaskMemFree(pbuffer);
    }
    就不会出现这样的问题了。

    另外发现,堆分配时要做好配对,TaskMemAlloc要与TaskMemFree一起用,
    New和Delete一起用,尤其在调用方法负责分配空间,调用者负责释放时,要
    做好约定,有次用TaskMemAlloc分配的空间,但用Delete释放掉了,造成内
    存泄漏,奇怪的是当时用Release版本,编译器不能检查出来,但用Debug版
    本就提示出错了。

  • 相关阅读:
    BUUCTF--[GUET-CTF2019]number_game
    36D杯CTF Re WP
    BUUCTF--[GWCTF 2019]re3
    虎符网络安全赛道 Re Game
    Python ZIP压缩文件破解
    合唱队, 华为
    字符串排序, 华为
    称砝码, 华为
    迷宫问题, 华为
    Sudoku , 华为
  • 原文地址:https://www.cnblogs.com/sizzle/p/1211318.html
Copyright © 2011-2022 走看看