我試圖在D3D中爲我的相機類實現Pitch/Yaw,但是我的Pitch()函數拋出了「訪問衝突讀取位置0x0000008C」。使用XMFLOAT3&XMVECTOR的內存異常
我google了一下,看到我不能在類/結構中使用XMVECTOR,因爲16位對齊。但是我已經知道了,我再次檢查它是否被聲明爲XMFLOAT3,這是!
事情是,在我所有的Camera類的其他功能(如更新視圖矩陣,...)不會拋出任何異常。這只是一個功能!
所以,在這裏就是我聲明我的類變量,使函數崩潰(雖然我的所有變量使其崩潰,並定義它們的方法相同):
XMFLOAT3 mRight;
以下是我聲明音高函數:
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值。在我的情況下,在DirectXMath的「mRight.x」情況下「__m128 x = _mm_load_ss(& pSource-> x);」。
一些新的調試結果: 當我從我的WM_MOUSEMOVE事件中調用'any'函數時會發生這種奇怪的情況。即使我的功能Walk(),當我按下某個鍵時調用它時,它完美地工作。
有史以來最奇怪的事!
感謝您的幫助!
什麼是您的目標架構? x86或x64?如果你正在爲x86構建,那麼你不能假設你的變量是16位的。此外,如果您可以通過調試器逐步查看代碼,以確切瞭解發生異常的位置,它可能會更有幫助。這很容易,因爲DirectXMath是開源的。 – rashmatash 2014-09-29 15:21:46
我的目標架構是x86,儘管x64給出了相同的結果。 2點:我真的這樣做,它發生在我(或DirectXMath)嘗試訪問x,y,z位置「mRight」時。在DirectXMath的情況下,它在「__m128 x = _mm_load_ss(&pSource-> x);」感謝您的幫助btw – Rakete1111 2014-09-29 15:54:08