Я пытался использовать XMVECTOR в качестве члена класса для ограничивающей рамки, так как я делаю много вычислений, но я использую XMFLOAT3 только один раз за кадр, поэтому у ограничивающей рамки есть метод, который дает мне его центр в XMFLOAT3 , в противном случае он остается в XMVECTOR; класс удаляется с помощью __declspec(align(16)) и работает в режиме отладки. Однако в режиме выпуска происходит сбой в тот момент, когда я что-то устанавливаю:
Box& Box::operator=(const Box& box)
{
_center = box._center;
_extents = box._extents;
return *this;
}
Всякий раз, когда я делаю:
Box A;
Box B;
A = B;
Он вылетает, выдавая мне 0xC0000005: местоположение чтения нарушения доступа 0x00000000. Также он падает, когда я создаю его как указатель:
Box* A = new Box();
Это конструктор:
Box::Box()
{
center = XMVectorZero();
extents = XMVectorSplatOne();
}
Опять же, это отлично работает в режиме отладки, но в режиме выпуска происходит сбой. Что может измениться в режиме выпуска, что приведет к созданию недопустимого кода? Нужно ли мне делать что-то еще, кроме выравнивания поля по 16 байтам?
Box
. DirectXMath включаетBoundingBox
уже вDirectXCollision.h
заголовок. - person Chuck Walbourn   schedule 05.08.2015