为什么我的调试器显示的值不同于打印的值?

时间:2015-02-16 20:55:10

标签: c++ debugging glm-math

我有一个类FlyCommand看起来像这样:

class FlyCommand : public Command
{
public:
    FlyCommand(float x, float y, float z) : dir(x, y, z, 0.0f) {}
    virtual void execute(SomeOtherClass& someOtherClassRef) 
    {
        std::cout << dir.x << dir.y << dir.z << std::endl; //pretend there's spaces in between
    }
    virtual ~FlyCommand(){}
private:
    glm::vec4 dir;
};

它继承自Command,它只是一个提供execute(SomeOtherClass&)的界面。类型glm::vec4是一个结构,表示具有4个浮点分量(x,y,z,w)的数学向量,它应该在16字节边界上对齐。

当我执行以下操作时:

int main()
{
    SomeOtherClass* s = new SomeOtherClass();
    FlyCommand* c = new FlyCommand(1.0f, 2.0f, 3.0f);
    c->execute(*s);
    delete s;
    delete c;
}

而不是打印1.0 2.0 3.0,它会显示出似乎是垃圾的东西,如果是常量垃圾,就像0 -4.22017e+037 3.135e-017一样。但是,我的调试器(MSVC 2013)显示dir.x(1.0),dir.y(2.0)和dir.z(3.0)的正确值。

我99%确定打印出来的垃圾问题是对齐问题,因为GLM库提供了一个#define GLM_FORCE_PURE的东西,可以使值打印出来,但是不允许使用关于向量的SSE东西。

但我只是想知道为什么调试器显示的值与打印的值不同。不应该是调试器,呃,我不知道,“读取”结构成员的方式与编译器相同吗?对于一个与对齐无关的东西和另一个对齐依赖的东西没有任何意义,它(我几乎不知道这意味着什么)?

0 个答案:

没有答案