使用 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”,有时在第二次。
我发现这是因为 m1 和 m2 没有正确对齐。用“XMMATRIX”替换“auto”似乎可以解决问题,所以我怀疑是编译器错误,但也有可能我做错了什么,或者没有启用某些选项。
我的代码有问题还是编译器错误?