INVALID HEAP ARGUMENT:使用operator new []分配,使用operator delete释放

时间:2015-10-02 02:09:35

标签: c++ arrays memory-leaks dynamic-memory-allocation memory-leak-detector

我正在使用Dr. Memory来调试我的代码。它给了我以下信息:

INVALID HEAP ARGUMENT: allocated with operator new[], freed with operator delete

但是,每当我使用delete[]代替delete时,它都会给我同样的错误。错误发生在以下行中:

for (int x = 0; x < width; ++x)
{
    delete data[x];
}
delete [] data;

变量data的分配方式如下:

data = new char*[width];
for (int i = 0; i < width; ++i)
{
    data[i] = new char[1];
}

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

您目前使用

分配元素
data[i] = new char[1];

并使用

删除它们
delete data[x];

当您使用new[]分配它们时,需要使用delete []删除它们。

delete [] data[x];

答案 1 :(得分:0)

您还需要匹配第二个new[]data[i] = new char[1]):

for (int x=0; x<width; ++x){
    delete [] data[x];
}
delete [] data;

答案 2 :(得分:0)

由于您使用的是c ++,而不是C ...

重新设计代码以使用STL和std :: string在程序中创建std :: strings的向量。

使用std :: string可能会消除内存泄漏。