您的位置:首页 > 其它

Visual Studio调试时,出现“触发一个断点”

2017-02-16 17:13 267 查看
问题描述:

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



源代码类似:

分析:

在F11单步调试

delete[] send_data;

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

知识点:

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

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

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

解决办法:

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

#define FILE_BUFFER_LENGTH 30000

重新编译,成功;在delete[] send_data;行设置断点,单步调试,顺利释放内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐