Я использую 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];
}
Может ли кто-нибудь помочь мне?
Вы в настоящее время выделяете элементы с
data[i] = new char[1];
и удалите их с
delete data[x];
Как вы распределили их с new[]
вам нужно удалить их с delete []
,
delete [] data[x];
Вы должны соответствовать второму new[]
(data[i] = new char[1]
) тоже:
for (int x=0; x<width; ++x){
delete [] data[x];
}
delete [] data;
Так как вы используете C ++, а не C …
Перефакторинг кода для использования STL и std :: string для создания векторов std :: strings в программе.
Использование std :: string, скорее всего, устранит утечку памяти.