我在我的代碼中使用了二維動態分配數組。一切正常,直到我的程序試圖調用我的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