gpt4 book ai didi

C++删除二维动态分配数组

转载 作者:行者123 更新时间:2023-11-28 02:29:10 26 4
gpt4 key购买 nike

我在代码中使用的二维动态分配数组有问题。一切正常,直到我的程序尝试调用我的 tablica2D 对象的析构函数。当我的程序执行到最后一个 delete[] tab 命令时,出现运行时错误“检测到堆损坏”。这是否意味着它之前的循环已经释放分配给 tab 的所有内存?我的印象是,要释放所有动态分配的内存,每个 new 命令都需要一个 delete 命令。还是其他原因导致此错误?

这是给我带来麻烦的类的代码:

class tablica2D
{
static const int k = 2;
int n, m;
string **tab;
public:
tablica2D(int n, int m)
{
this->n = n;
this->m = m;

tab = new string*[n];
for (int i = 0; i < m; i++)
{
tab[i] = new string[m];
}
}
string* operator [](int n)
{
return tab[n];
}
static const bool compareRows(const string* i, const string* j)
{
int x = atoi(i[k].c_str());
int y = atoi(j[k].c_str());
return x > y;
}
void sort()
{
std::sort(tab, tab + n, compareRows);
}
~tablica2D()
{
for (int i = 0; i < n; i++)
{
delete[] tab[i];
}
delete[] tab;
}
};

最佳答案

您在 new 循环中使用了错误的变量,并且另外创建了一个 3d 数组而不是 2d 数组:

    for (int i = 0; i < m; i++)
// ^^, should be n
{
tab[i] = new string[m];
// ^^^
// should be new string, not new string[m]
}

对比:

    for (int i = 0; i < n; i++)
// ^^, this one is correct
{
delete[] tab[i];
}

关于C++删除二维动态分配数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com