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( ) );

    相当好用。。。

  • 相关阅读:
    mysql主从备份案例—读写分离(异步主从)
    MySQL 汉化+完全备份操作实例
    Linux指令和shell脚本
    文件压缩和打包
    文件系统格式化和挂载
    linux常用指令和一些选项的汇总
    linux文件权限和群组
    [windows][技巧]百度网盘提示您的电脑已安装百度网盘,是否覆盖,解决方法
    [html][js]视频倍速播放功能
    [julia][学习笔记]julia的安装
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3104622.html
Copyright © 2011-2022 走看看