我的应用程序运行2天后,我一直收到此错误。
我被告知它是某种缓冲区溢出,但它是唯一的选择吗?
该应用程序是使用Visual C ++ 6.0以C ++编写的。
答案 0 :(得分:2)
重现这个的最简单方法是这样的:
//Allocate space for holding 10 ints
int *p = new int[10];
//Overwrite the memory.. doesn't crash here
p[10] = 8;
//Try to delete..crashes..
delete[] p;
检查是否要写入超出其分配空间的内存位置。
答案 1 :(得分:2)
在调试中,当您通过new
获得动态缓冲区时,会在缓冲区之前和之后插入一个特殊代码来保护缓冲区。
例如:
<Guard>=====buffer allocated on heap of required size=======<Guard>
如果超出缓冲区,插入的防护已损坏,当您尝试删除缓冲区时,调试器将在检测到缓冲区溢出后置位。
在大型代码库中很难找到缓冲区溢出。我会建议几种可以帮助您检测这种情况的方法:
答案 2 :(得分:0)
使用正确的选项,Visual C ++会在每个缓冲区的末尾抛出一个保护值。释放缓冲区时,它会检查它是否仍然有效。如果没有,它会引发您所看到的错误。
此错误的最常见原因是缓冲区溢出。但是,它(理论上)可以由随机指针写入引起(毕竟,可以写入保护值)。
然而,赔率是超支。