解决错误的一般方法:变量'x'周围的堆栈已损坏

lez*_*lon 19 c++ debugging visual-studio-2010

我有一个程序在调试中提示我VS2010中的错误:

Error: Stack around the variable 'x' was corrupted
Run Code Online (Sandbox Code Playgroud)

这给了我可能发生堆栈溢出的功能,但我无法直观地看到问题所在.

有没有通用的方法来调试VS2010的这个错误?是否可以识别哪个写操作正在覆盖错误的堆栈内存?谢谢

Dav*_*men 13

有没有通用的方法来调试VS2010的这个错误?

不,没有.你所做的是以某种方式调用未定义的行为.这些行为未定义的原因是一般情况很难检测/诊断.有时这样做是不可能的.

但是,通常会导致您出现问题的事情数量有限:

  • 记忆处理不当:
    • 删除两次,
    • 使用错误的删除类型(free对于分配的内容new等),
    • 在删除内存之后访问某些内容.
  • 返回指向本地的指针或引用.
  • 读取或写入数组的末尾.


Luc*_*ore 8

这可能是由几个问题引起的,这些问题通常很难看出:

  • 双删除
  • delete分配的变量new[]delete[]分配的变量new
  • delete 分配的东西 malloc
  • delete 自动存储变量
  • 通过引用返回本地

如果没有立即清楚,我会得到一个内存调试器(我可以想到Rational Purify for windows).