我一直在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;
}
任何帮助都会受到赞赏,如果我需要提供更多信息,我也可以这样做,因为我已经坚持了好几天,我确信它是一些小的,我错过了或做错了。< / p>
答案 0 :(得分:4)
您需要确保XMVECTOR
&amp; DXMath中的XMMATRIX
类型正确对齐到16字节(see the docs here),对于堆栈分配,这是自动的,但对于堆分配,您需要使用_aligned_malloc
来获得正确对齐的内存。或者,您可以使用XMFLOATn
和XMFLOATnxn
存储,并在实际使用时使用未对齐的矢量加载。
对于包含XM类型的类或结构,您可以通过重载new
运算符来明确对齐分配来克服这个问题;最简单的方法是从这样的模板派生(注意:这不完整,有几种operator new
&amp; 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);
}
}