2014-02-10 34 views
0

看起来的std :: vector.resize实际上并不有时分配内存。如果我运行这段代码:的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

未处理的异常:0000005:访问冲突读取位置00000000。

任何想法是怎么回事?为什么我不能使用resize

编辑: 这里的InstanceData

struct InstanceData 
{ 
    DirectX::XMMATRIX worldMatrix; 
    DirectX::XMFLOAT4 color; 
}; 
+1

*您可以使用*调整大小XMFLOAT4X4。问题很可能在其他地方。你应该发布一个简单的测试用例来重现问题。 – juanchopanza

+0

你能分享InstanceData的定义是什么? – Pedrom

+0

'resize'和'reserve'做2个不同(虽然相关的)东西...... –

回答

0

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