我在我的代码中使用了二维动态分配数组。一切正常,直到我的程序试图调用我的tablica2D
对象的析构函数。当我的程序到达最后的delete[] tab
命令时,我收到一个运行时错误“HEAP CORRUPTION DETECTED”。这是否意味着它之前的循环已经释放了分配给tab
的所有内存?我的印象是,要释放所有动态分配的内存,每个new
命令需要有一个delete
命令。或者是其他的东西导致这个错误?C++删除二维动态分配数组
这是这是造成我的麻烦之类的代码:
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;
}
};
是否有你不使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)的原因? – 2015-04-05 16:07:05
为什么对天堂' s为什么你自己努力与内存管理,它是完全可用的[标准c + +容器](http://en.cppreference.com/w/cpp/container)和[动态内存管理](http://en.cppreference.com/w/cpp/memory)? – 2015-04-05 16:09:55
@πάνταῥεῖ也许这是一个任务。 – 2015-04-05 16:11:09