zoukankan      html  css  js  c++  java
  • CRT detected that the application wrote to memory after end of heap buffer错误

    转载:http://blog.csdn.net/wu_lai_314/article/details/8241697

    CRT detected that the application wrote to memory after end of heap buffer

    多是中间对其进行了一些操作,在程序结束处,释放内存的时候,引起错误:



    HEAP CORRUPTION DETECTED:after Normal block(#***) at 0x****.CRT detected that application wrote memory after end of heap buffer.


    错误原因:


    以对内在操作的过程中,所写的地址超出了,所分配内在的边界

    memcpy的时候, copy的大小超出了目标数组的大小

    有个建议是:

    1、内存申请多少释放多少,释放掉你申请过的内存,不要乱释放;
    2、不能释放已经释放的内存;

     

    网友还有一个建议是:

    “增大内存开辟空间,new时多加1或者更大,这样就不会导致内存释放时,越界!
    比如 int* p = new int[6];
    for(int i=0;i<5;i++)
    p[i]=i;
    delete []p;
    这样子实际用了5个,就会成功释放!!!”

     

     

    以下小部分画线内是另一个网友的笔记:

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ans = new int[size_a+size_b];        // 动态分配数组空间

    delete [] ans;

    一把delete [] ans;删掉程序就不弹出错误,这是为什么呢??

    错误原因

    因为对内存的操作越界了,超出所分配的内存的边界。

    解决:

    增大分配的内存!   

    e.g.

    ans = new int[size_a+size_b +1 ];     

    或者加到自己适宜的大小,问题即可解决...

    总结:

    对内存的操作要细之又细,new完后要delete,操作时不要越界(包括向前越或向后越).......

    另外添加一下:我是很快找到这个错误 因为我在网络上找到一种快速检测内错泄漏的方法:

    只有一行代码: _ASSERTE( _CrtCheckMemory( ) );

    相当好用。。。

  • 相关阅读:
    python管理包(模块和包的应用)
    简单运行 Jupyter Notebook
    Linux出现“FirewallD is not running”解决办法
    Mindjet MindManager2020切换中文界面的教程
    idea 快捷键汇总
    南怀瑾经典语录
    CentOS 7 安装SonarQube 8.3版本
    Jenkins插件开发完全示例
    Jenkins在Pod中实现Docker in Docker并用kubectl进行部署
    Jenkins的kubernetes-plugin使用方法
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3104622.html
Copyright © 2011-2022 走看看