0

我正在使用 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];
}

有人可以帮我吗?

4

3 回答 3

1

您当前分配的元素

data[i] = new char[1];

并删除它们

delete data[x];

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

delete [] data[x];
于 2015-10-02T02:12:28.777 回答
0

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

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

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

于 2015-10-02T02:40:56.043 回答
0

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

for (int x=0; x<width; ++x){
    delete [] data[x];
}
delete [] data;
于 2015-10-02T02:13:59.690 回答