VS2012でコンパイルし、DirectXMathライブラリを操作しているときに、コンパイラがXMMATRIXを調整していないように見える問題が発生しました。問題を次のように簡略化しました。
#include <DirectXMath.h>
using namespace DirectX;
int _tmain(int argc, _TCHAR* argv[])
{
auto m1 = XMMatrixIdentity();
auto m2 = XMMatrixIdentity();
auto t1 = XMMatrixTranspose( m1 ); // sometimes access violation occurs here
auto t2 = XMMatrixTranspose( m2 ); // or sometimes here
return 0;
}
コードを何度も再実行すると、最初の転置で「アクセス違反の読み取り場所0xFFFFFFFF」が発生する場合があり、2番目の転置で発生する場合があります。
これは、m1とm2が適切に位置合わせされていないことが原因であることがわかりました。「auto」を「XMMATRIX」に置き換えると問題が解決するようです。コンパイラのバグが疑われますが、何か間違ったことをしている、または一部のオプションを有効にしていない可能性もあります。
私のコードに何か問題がありますか、それともこれはコンパイラのバグですか?