Visual Studio 2010对局部变量的不稳定报告

时间:2011-10-24 00:56:45

标签: c++ visual-studio debugging

在我的一个名为MoveMethod的对象中,我有三个TileGridAreas,我创建的数据结构用于存储相对于特定原点的列 - 行对。

TileGridAreas在它们的操作中是相当基本的,并且它们在这个项目的许多其他区域中运行得很好,但是当我在MoveMethod中通过指针引用它们时,更改没有正确显示,因此它会弄清楚所有我想要完成的寻路工作。

我在第25-27行here上的构造函数中初始化了三个。

并在第2行专门针对previewPath执行第一个操作编辑:只允许2个显式链接(http://codepad.org/wXxBL7nb)

它正确地读取了previewPath为空,并且因此在第5行执行了addMember函数。我已经在调试中逐步完成了它,并且没有任何理由让它不能工作,但是当它从它返回时将addMember函数添加到外部函数中,快速查看locals window显示它有任何原因决定不添加到previewPath而是添加到possibleDestinations。

这是visual studio或我的代码的问题吗?我发现,当我依赖的源有关所涉及变量的准确信息是错误的时,调试对象的功能部分非常困难。

1 个答案:

答案 0 :(得分:0)

对我来说很好。我将代码缩减为最小的可运行版本 - 您将来应该自己这样做。

#include <assert.h>

class TileGridArea
{
public:
    TileGridArea() : changed (false) {}

    void addMember(int,int) {changed = true;}

    bool changed;
};

class MoveMethod
{
public:
    MoveMethod()
    {
        movePath = new TileGridArea();
        previewPath = new TileGridArea();
        possibleDestinations = new TileGridArea();
    }

    TileGridArea* movePath;
    TileGridArea* previewPath;
    TileGridArea* possibleDestinations;
};

int main()
{
    MoveMethod m;

    m.previewPath->addMember(3,4);
    assert(m.previewPath->changed);
    assert(!m.possibleDestinations->changed);
}