使用XMFLOAT3&的内存异常XMVECTOR

时间:2014-09-28 19:19:44

标签: c++ direct3d memory-alignment directxmath

我正在尝试在D3D中为我的Camera类实现Pitch / Yaw,但我的Pitch()函数会抛出“访问冲突读取位置0x0000008C”。

我google了一下,看到我不能在类/结构中使用XMVECTOR,因为16位对齐。然而,我已经知道了,我再次检查它被宣布为XMFLOAT3,它是!

问题是,在我所有的Camera类的其他函数中(比如更新视图矩阵,......)不会抛出异常。它只是在一个功能中!

所以,这就是我如何声明我的类变量使函数崩溃(虽然我的所有变量都使它崩溃,并且它们以相同的方式定义):

XMFLOAT3 mRight;

以下是我如何声明Pitch功能:

void Pitch(float a)
{
    //Here it makes my code crash
    XMMATRIX R = XMMatrixRotationAxis(XMLoadFloat3(&mRight), a);

    //Store and compute
    XMStoreFloat3(&mLook, XMVector3TransformNormal(XMLoadFloat3(&mLook), R));
    XMStoreFloat3(&mUp, XMVector3TransformNormal(XMLoadFloat3(&mUp), R));
}

我也使用x86作为架构,虽然x64给出了完全相同的结果(除了内存位置:D)。 我或DirectXMath库都不能访问“mRight”的x,y和z值。在我的案例中,“mRight.x”在DirectXMath的情况下“__m128 x = _mm_load_ss(& pSource-> x);”。

一些新的Debug结果: 当我从WM_MOUSEMOVE事件中调用'any'函数时,会发生这种奇怪的现象。甚至我的函数Walk(),当我按下一个键时调用它时效果很好。

最奇怪的事情!

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我知道我的错误!!我给了一个使用该代码的类的无效指针:D修复它