Удалить указатель вызывает утечку памяти?

Я использую Run Time Library, CRT, чтобы обнаружить утечку памяти. Вот что я нашел в деструкторе:

                    _CrtMemCheckpoint(&crtMemStateFinish);
nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish);
sizeChange = crtMemStateFinish.lSizes - crtMemStateStart.lSizes;
if(nDifference > 0)
_CrtDumpMemoryLeaks();
nDifference = 0;
sizeChange = 0;
_CrtMemCheckpoint(&crtMemStateStart);


                delete[] ptr;
                ptr = NULL;

                    _CrtMemCheckpoint(&crtMemStateFinish);
nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish);
sizeChange = crtMemStateFinish.lSizes - crtMemStateStart.lSizes;
if(nDifference > 0)
_CrtDumpMemoryLeaks();
nDifference = 0;
sizeChange = 0;
_CrtMemCheckpoint(&crtMemStateStart);

NDifference > 0, поэтому есть утечка памяти, но она не говорит, где.

Вот как ptr объявлен и определен:

char ** ptr;

ptr = new char*[4];

Какие-либо предложения?

1 ответ

Решение

Вы выделяете массив указателей. Вам нужно не только удалить массив, но и удалить каждый указатель в массиве. Очевидно, вам нужно сделать это перед удалением массива.

Другие вопросы по тегам