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

C++ std::vector.resize有时不分配内存?,c++,vector,visual-studio-2013,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;

看起来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);
}

解决方案是使用XMFLOAT4X4代替XMMATRIX

您可以使用resize。问题很可能出在其他地方。你应该发布一个简单的测试用例来重现这个问题。你能分享InstanceData的定义吗?resize和reserve做两件不同但相关的事情…我不确定这是否是你的情况,但XMMATRIX必须是16字节aligned@juanchopanza当然我可以使用调整大小,但它似乎没有分配内存,因为我在尝试使用它时遇到了一个异常。重现该问题的测试用例是上面的
struct InstanceData 
{
    DirectX::XMMATRIX worldMatrix;
    DirectX::XMFLOAT4 color;
};