用C ++检测堆栈损坏

时间:2013-04-26 15:12:01

标签: c++ visual-studio-2012 callstack

我正在从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.

我很确定弹出错误的代码没有什么问题。我认为之前存在缓冲区或堆栈问题,这就是问题出现的地方。

你看到过这样的事吗?有什么建议吗?

0 个答案:

没有答案