我在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。
这就是猎物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;
}任何帮助都将不胜感激,如果我需要提供更多的信息,我也可以做到,因为我已经被困在这个问题上好几天了,我确定它是我遗漏的或做错了的小东西。
发布于 2014-03-03 05:55:33
您需要确保来自DXMath的XMVECTOR和XMMATRIX类型与16字节(see the docs here)正确对齐,对于堆栈分配,这是自动的,但是对于堆分配,您需要使用_aligned_malloc来获得正确对齐的内存。或者,您可以使用XMFLOATn和XMFLOATnxn来存储和使用未对齐的向量加载,当您实际使用它们时。
对于包含XM类型的类或结构,您可以通过重载new操作符来显式对齐分配来克服这一点;最简单的方法是从这样的模板派生(注意:这并不完整,下面是几种类型的operator 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);
}
}https://stackoverflow.com/questions/22133742
复制相似问题