我正在从Visual Studio 2010升级到2012,并且出现了类似堆栈损坏的问题。
我有一个包含一些成员函数的类:
class Foo {
double m_d;
void Fn_1();
double Fn_2(double a, double b, double& c);
...
}
void Foo::Fn_1() {
m_d = 1.5;
double a(1), b(2), c, d;
d = Fn_2(a, b, c);
}
double Foo::Fn_2(double a, double b, double& c) {
double x = 0;
c = m_d;
return a + b + c;
}
我编译没有优化,并在调试器下运行。当我从Foo :: Fn_1跟踪到Foo :: Fn_2时,该指针变为0xcccccccc,表示单位化内存。在Foo :: Fn_2中,变量m_d是垃圾,因为这个是垃圾。当Foo :: Fn_2返回时,Visual Studio会抛出一个错误:
Run-Time Check Failure #2 - Stack around the variable 'x' was corrupted.
我很确定弹出错误的代码没有什么问题。我认为之前存在缓冲区或堆栈问题,这就是问题出现的地方。
你看到过这样的事吗?有什么建议吗?