0

Я использую Dr. Memory для отладки моего кода. Это дает мне следующее сообщение:INVALID HEAP ARGUMENT: выделено оператором new [], освобождено оператором delete

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]; 
} 

Может кто-то пожалуйста, помогите мне?

+1

Это потому, что вы все еще используете 'delete' для удаления объектов, выделенных с помощью' new [] '. – Hurkyl

+1

Выделение одного символа в виде массива? Это падлин. На самом деле, злоупотребление памятью в целом - это paddlin ', почему вы не используете 'std :: vector'? – user657267

ответ

1

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

data[i] = new char[1]; 

и удалить их с

delete data[x]; 

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

delete [] data[x]; 
+0

Я делаю это. но как только я это сделаю, он говорит мне, что я должен был использовать delete вместо delete [] – user2804865

+0

Вы уверены, что у вас нет другого вызова 'new', который просто выполняет' data [i] = new char' или что-то похожее? –

0

Вы должны соответствовать второй 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, вероятно, устранит утечку памяти.