释放内存时出现严重错误

时间:2014-02-17 20:54:22

标签: c++

我有一个包含指数缓冲区的“指数”结构(DirectX,但我认为没关系):

struct Indices {
    CComPtr<ID3D11Buffer> buffer;
    UINT indexCount;
};

和一个使用类Indices的对象初始化数组的方法:

mIndices = new Indices*[layers];
for( int i = 0; i < layers; ++i )
    mIndices[i] = new Indices[corrections];

//... initializing buffers

和释放记忆的方法:

for( int i = 0; i < layers; ++i )
    delete mIndices[i];                // here I am getting critical error

delete mIndices;

但当我尝试释放内存时,我收到“检测到严重错误c0000374”(在上面的代码中指出)。

你能帮助我吗?我希望发布的代码足以解决我的问题。

由于

2 个答案:

答案 0 :(得分:5)

使用新T [n]创建数组时,还必须使用delete []释放内存:

for( int i = 0; i < layers; ++i )
    delete[] mIndices[i];

delete[] mIndices;

手动内存管理非常简单,容易导致崩溃和内存泄漏。你考虑过std :: vector吗?它可以用作动态数组的替代品:

// create and initialize the arrays
std::vector< std::vector<Indices> > indices(layers, std::vector<Indices>(corrections));

// will be automatically freed when lifetime ends

答案 1 :(得分:4)

由于您要分配数组,因此应该释放数组。使用delete[]代替delete