我有一个包含指数缓冲区的“指数”结构(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”(在上面的代码中指出)。
你能帮助我吗?我希望发布的代码足以解决我的问题。由于
答案 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
。