std :: vector.resize有时不分配内存?

时间:2014-02-10 17:34:00

标签: c++ vector visual-studio-2013

似乎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;
};

1 个答案:

答案 0 :(得分:0)

解决方案是使用XMFLOAT4X4而不是XMMATRIX