Компиляция с 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", похоже, решает проблему, поэтому мое подозрение является ошибкой компилятора, но также возможно, что я делаю что-то неправильно или не позволяю некоторые опции.
Что-то не так с моим кодом или это ошибка компилятора?