2015-12-29 4 views
1

Я написал код, который имитирует матрицу. Эта матрица имеет указатель на указатель и фактически представляет собой массив связанных списков. У меня есть два из них: один для строк и второй для столбца. каждый массив индексирует его первую строку матрицы/col, а список - это остальное число в rox/col.Ошибка отладки: _CrtIsValidHeapPointer (block)

Я могу отправить код, но его не короткий.

Моя проблема в том, что после того, как я сделаю некоторые действия, и я попытаюсь удалить матрицу в конце - это поп меня эта ошибка. я судимый изменить свой код, и я обнаружил, что проблема здесь:

delete this->rowsArray; 
this->rowsArray = newRowArray; ->here 


delete this->colsArray; 
this->colsArray = newColArray; ->here 

rowsArray объявления colsArray initilized так:

rowsArray = new matrixNode*[lastRowPlace+1]; colsArray = new matrixNode*[lastColPlace+1];

же о newColsArray и строке ... I надеюсь, что вы сможете дать мне совет, потому что я действительно не знаю, что делать :(

** Просто забыл сказать, что проблема поп-музыки только у деструктора ...

+1

Проблема где-то в другом месте. Хотя 'rowsArray' был правильно выделен, вы изменили указатель где-то в своем коде после создания' rowsArray'. В этот момент он больше не был действительным указателем кучи. – abelenky

+0

Возможно, вы уже удалили блок, который освобожден в деструкторе, не указав указатель на nullptr. Возможно, вы испортили кучу каким-то несвязанным кодом. Возможно, ваш матричный класс имеет неправильно реализованный конструктор копирования, оператор присваивания ... – drescherjm

+0

Проблема вызвана «выполнением некоторых действий». Вероятно, вы должны пересмотреть свой код - массив связанных списков не является разумным представлением матрицы. – molbdnilo

ответ

2

Если вы определили указатель, такие как new T* [size]

вы должны удалить его с delete[] вместо delete

+1

Вы имели в виду ** вместо ** delete? – ayushgp

+0

Прошу прощения, я уже исправил его. –