У меня проблема с двумерным динамически распределенным массивом, который я использую в своем коде. Все работает нормально, пока моя программа не попытается вызвать деструктор моего объекта tablica2D
. Я получаю ошибку времени выполнения «HEAP CORRUPTION DETECTED», когда моя программа доходит до последней команды delete[] tab
. Означает ли это, что цикл, предшествующий ему, уже освобождает всю память, назначенную tab
? У меня создалось впечатление, что для освобождения всей динамически назначенной памяти должна быть одна команда delete
для каждой команды new
. Или что-то еще вызывает эту ошибку?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)? –
Почему для небес? s ради вы боретесь с управлением памятью самостоятельно, где все это прекрасно доступно с [стандартными контейнерами C++] (http://en.cppreference.com/w/cpp/container) и [динамическим управление памятью] (http://en.cppreference.com/w/cpp/memory)? –
@ πάνταῥεῖ Возможно, это задание. –