0

我正在从 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 时,this 指针变为 0xcccccccc,表示未初始化内存。在 Foo::Fn_2 中,变量 m_d 是垃圾,因为是垃圾。当 Foo::Fn_2 返回时,Visual Studio 会抛出一个错误,上面写着:

 Run-Time Check Failure #2 - Stack around the variable 'x' was corrupted.

我相当确定弹出错误的代码实际上没有任何问题。我在想早先存在缓冲区或堆栈问题,而这正是问题出现的地方。

你见过这样的事情吗?有什么建议吗?

4

0 回答 0