[英]Dx11 Crash when accessing XMMATRIX
我一直在DirectX 11中创建一个植群项目,并且在尝试创建指向对象的指针的矢量时出错,并且在推回该对象的第三次迭代中,它会崩溃并跳至此:
XMFINLINE _XMMATRIX& _XMMATRIX::operator=
(
CONST _XMMATRIX& M
)
{
r[0] = M.r[0];
r[1] = M.r[1];
r[2] = M.r[2];
r[3] = M.r[3];
return *this;
}
执行此代码时发生崩溃:
Populate();
for (unsigned int i = 0; i < m_numOfPrey; i++)
{
m_preyVec[i]->LoadContent(dx, colour, yaw, pitch, roll, scale);
srand (time(NULL));
XMFLOAT3 tempPos;
tempPos.x = rand() % 40;
tempPos.y = rand() % 40;
tempPos.z = rand() % 40;
m_preyVec[i]->SetPosition(tempPos);
}
return true;
填充功能:
for (unsigned int i = 0; i < m_numOfPrey; i++)
{
Prey* newPrey = new Prey();
m_preyVec.push_back(newPrey);
}
编辑:猎物从车辆类继承(它使用我的“猎物和捕食者”为车辆构建缓冲区,FX和InputLayout)。
所以这就是Prey LoadContent();
{
Vehicle::LoadContent(dx, colour, yaw, pitch, roll, scale);
return true;
}
这是Vehicle LoadContent();
{
if(!GameObject::LoadContent(dx, m_position, colour, yaw, pitch, roll, scale))
{
return false;
}
if(!BuildBuffers(dx))
{
return false;
}
if(!BuildFX(dx))
{
return false;
}
if(!BuildInputLayout(dx))
{
return false;
}
return true;
}
任何帮助将不胜感激,如果我需要提供更多信息,我也可以做到这一点,因为我已经坚持了好几天,而且我确定这是我所缺少或做错的小事情。
您需要确保XMVECTOR
中的XMVECTOR
和XMMATRIX
类型正确对齐到16个字节( 请参阅此处的文档 ),对于堆栈分配,这是自动的,但是对于堆分配,则需要使用_aligned_malloc
来获得正确对齐的内存。 另外,您可以使用XMFLOATn
和XMFLOATnxn
进行存储,并在实际使用它们时使用未对齐的矢量载荷。
对于包含XM类型的类或结构,可以通过重载new
运算符以显式对齐分配来解决此问题。 最简单的方法是从这样的模板派生(注意:这还不完整,有几种类型的运算符new
& delete
):
template <size_t align> class AlignedAllocPolicy
{
public:
void* operator new(std::size_t size)
{
return _aligned_malloc(size,align);
}
void operator delete(void* mem)
{
_aligned_free(mem);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.