Visual Studio调试时,出现“触发一个断点”内存释放出现异常

问题描述:

Visual Studio编译代码顺利通过,调试代码时出现“已触发一个断点”,如下图:

源代码类似:

分析:


在F11单步调试

delete[] send_data;

这行时,发现内存释放出现异常,导致出现“以触发一个断点”。很有可能是缓冲区溢出。


知识点:


缓冲区溢出:缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

栈溢出:栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称为缓冲区溢出。

栈溢出是缓冲区溢出的一种。

解决办法:


将缓冲区大小变大,扩大十倍;

#define FILE_BUFFER_LENGTH 30000

重新编译,成功;在delete[] send_data;行设置断点,单步调试,顺利释放内存。
--------------------- 
作者:SnailWalking 
来源:CSDN 
原文:https://blog.csdn.net/zhao1999qian/article/details/55261287?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/weixin_42462804/article/details/83053530