c ++局部变量被覆盖(但仅在某些笔记本上)

时间:2015-06-05 10:52:42

标签: c++ qt

我正面临一些只在某些笔记本上出现的奇怪行为。 我使用msvc 2012和qt框架在c ++中开发。

我将尝试总结这个问题,我希望有人知道问题可能是什么,或者我可以尝试找出什么......

一般来说,存在以下问题:

void myclass::foo() 
{
    const double value1 = 100.0;
    double value2;

    value2 = some_function_returning_double();

    if(value1 > value2)
    {
         //__ do something
    }
}

问题是条件失败,因为局部变量被覆盖。 如果我做一些调试输出,我可以看到变量value1不再是100.0而是一些随机值..这样比较随机失败..

我想到的一件事是,如果我不使用局部变量,一切正常。如果我将value1和value2设置为我的类的成员变量,一切都可以正常工作,但这不是解决方案。

现在奇怪的是,这个错误只发生在某些笔记本电脑上(某些移动i5 cpu)。 在我的机器(i5)和许多其他笔记本电脑(甚至其他移动i5)上一切正常。

我知道你无法通过我在这里提供的这些小信息解决我的问题,但也许你们中的一些人有任何暗示问题可能是什么以及我可以尝试解决这个问题。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

在visual studio 2012中,在被覆盖的变量的地址上添加数据断点(debug-> new breakpoint-> new data breakpoint)。

首先,在函数开始时中断。 然后设置数据断点:只需在" New breakpoint中输入&value1输入框。

然后它应该在修改了值之后中断,你应该看到罪魁祸首。

数据断点是一个非常强大的工具,它帮助我很快发现了令人讨厌的错误。