似乎std :: vector.resize实际上并没有分配内存。如果我运行这段代码:
std::vector<InstanceData> instanceData;
instanceData.resize(meshCount);
float randX = 0.0f;
float randY = 0.0f;
float randZ = 0.0f;
float maxX = 1000.0f;
float maxY = 1000.0f;
float maxZ = 1000.0f;
for(int i = 0; i < meshCount; i++)
{
randX = (rand() % 100) * 0.01f;
randY = (rand() % 100) * 0.01f;
randZ = (rand() % 100) * 0.01f;
instanceData[i].worldMatrix = DirectX::XMMatrixTranspose(DirectX::XMMatrixTranslation(randX * maxX, randY * maxY, randZ * maxZ));
instanceData[i].color = DirectX::XMFLOAT4(randX, randY, randZ, 1.0f);
}
当我为发布版本构建时,程序有时会崩溃,但是当我构建调试版本时,似乎没有。我使用Visual Studio 2013进行编译。
如果我将resize(meshCount)
更改为reserve(meshCount)
(或只是删除它)并使用临时的InstanceData,然后我只需填充数据并推入向量,它似乎不会崩溃。
如果我将调试器附加到发布版本,它会给我这个错误消息:
path.exe中0x00BB5BCB处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。
知道发生了什么事吗?为什么我不能使用resize
?
编辑: 这是InstanceData
struct InstanceData
{
DirectX::XMMATRIX worldMatrix;
DirectX::XMFLOAT4 color;
};
答案 0 :(得分:0)
解决方案是使用XMFLOAT4X4而不是XMMATRIX