Недопустимый аргумент кучи: выделен оператором new [], освобожден оператором delete

Я использую Dr. Memory для отладки своего кода. Это дает мне следующее сообщение:

INVALID HEAP ARGUMENT: allocated with operator new[], freed with operator delete

Однако всякий раз, когда я использую delete[] вместо delete, это дает мне ту же ошибку. Ошибка возникает в следующих строках:

for (int x = 0; x < width; ++x)
{
delete data[x];
}
delete [] data;

переменная data распределяется следующим образом:

data = new char*[width];
for (int i = 0; i < width; ++i)
{
data[i] = new char[1];
}

Может ли кто-нибудь помочь мне?

0

Решение

Вы в настоящее время выделяете элементы с

data[i] = new char[1];

и удалите их с

delete data[x];

Как вы распределили их с new[] вам нужно удалить их с delete [],

delete [] data[x];
1

Другие решения

Вы должны соответствовать второму new[] (data[i] = new char[1]) тоже:

for (int x=0; x<width; ++x){
delete [] data[x];
}
delete [] data;
0

Так как вы используете C ++, а не C …

Перефакторинг кода для использования STL и std :: string для создания векторов std :: strings в программе.

Использование std :: string, скорее всего, устранит утечку памяти.

0
По вопросам рекламы [email protected]