2015-06-23 37 views
0

我正在使用DirectX應用程序,並且在將兩個矩陣放在一起時遇到了一些問題,當我嘗試獲取運行時錯誤時。如果我在頭文件中聲明瞭矩陣,我只會得到錯誤,如果我在函數中聲明它們在本地工作正常。這不是在我得到這種類型的錯誤的應用程序中唯一的地方。將變量移動到頭文件時出現運行時錯誤


GraphicClass.cpp

void GraphicClass::UpdateScene() 
{ 
    Cube1World = DirectX::XMMatrixIdentity(); 

    DirectX::XMVECTOR rotaxis = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); 
    Rotation = DirectX::XMMatrixRotationAxis(rotaxis, rot); 
    Translation = DirectX::XMMatrixTranslation(0.0f, 0.0f, 4.0f); 

    Cube1World = Translation * Rotation; //I get run time error on this line 
} 

GraphicClass.h

class GraphicClass{ 

    DirectX::XMMATRIX Cube1World; 
    DirectX::XMMATRIX Rotation; 
    DirectX::XMMATRIX Translation; 
    float rot = 0.01f; 

    //other Code 
} 

錯誤消息

Unhandled exception at 0x002F4C0F in Engine.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF. 

我能夠在頭文件中聲明Cube1World,但我如果試圖做它與旋轉或翻譯我得到運行時錯誤。

我使用visual studio 2015和最新的directx sdk運行windows 8.1。 我希望我已經解決了這個問題,提前致謝。

+0

1.爲0xFFFFFFFF看起來很像一個未初始化或搗爛指針。 2.將問題分解到可能的最小值,可能是頭文件,帶有所需成員和UpdateScene方法的類的簡化版本,以及調用UpdateScene的主函數。 – user4581301

+0

如果您使用VS的調試程序執行代碼,旋轉和翻譯在崩潰前的樣子是什麼? – user4581301

+0

這是一個有趣的迂迴偏差。 – user4581301

回答

1

我發現‘從‘弗蘭克D.露娜’它說,在此線程

Crash after m = XMMatrixIdentity() - aligment memory in classes?

「在這本書中’入門3D遊戲編程與DirectX 11的回答:

不要使用XMMATRIX爲一類或結構的成員始終使用XMFloat4x4和加載和存儲回來,如果你需要它。 「

+0

閱讀[DirectXMath程序員指南](https://msdn.microsoft.com/en-us/library/windows/desktop/ee415571.aspx),特別是開始部分,[類型使用指南](https:/ /msdn.microsoft.com/en-us/library/windows/desktop/ee418725.aspx#type_usage_guidelines_)。請注意,您可能希望使用[SimpleMath](http://blogs.msdn.com/b/shawnhar/archive/2013/01/08/simplemath-a-simplified-wrapper-for-directxmath.aspx)包裝器[DirectX工具包](http://go.microsoft.com/fwlink/?LinkId=248929)這使得使用類型更友善一點。 –

3

嘗試定義一個構造函數,然後初始化您的數據。爲了避免在* .h文件中多次包含define include guard或使用#pragma一次。

+1

合理的建議,但沒有解釋它與OP的問題之間的關係,或者與OP的問題甚至相關。 – user4581301

+0

我做了一個構造函數並初始化了我的數據,但它沒有解決這個問題 GraphicClass :: GraphicClass() \t Translation = DirectX :: XMMATRIX(); \t Rotation = DirectX :: XMMATRIX(); } – user3027185

相關問題