2014-09-28 44 views
1

我試圖在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(),當我按下某個鍵時調用它時,它完美地工作。

有史以來最奇怪的事!

感謝您的幫助!

+0

什麼是您的目標架構? x86或x64?如果你正在爲x86構建,那麼你不能假設你的變量是16位的。此外,如果您可以通過調試器逐步查看代碼,以確切瞭解發生異常的位置,它可能會更有幫助。這很容易,因爲DirectXMath是開源的。 – rashmatash 2014-09-29 15:21:46

+0

我的目標架構是x86,儘管x64給出了相同的結果。 2點:我真的這樣做,它發生在我(或DirectXMath)嘗試訪問x,y,z位置「mRight」時。在DirectXMath的情況下,它在「__m128 x = _mm_load_ss(&pSource-> x);」感謝您的幫助btw – Rakete1111 2014-09-29 15:54:08

回答

0

我知道我的錯誤!我給了一個無效的指針,指向使用該代碼的類:D修復了它

+0

如果您要使用此模式,您可能需要查看使用[DirectX工具包](http://go.microsoft.com/fwlink/?LinkId=248929)中的SimpleMath。 – 2014-09-30 22:48:11