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

Я использую 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];

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

0

Решение

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

4

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

Других решений пока нет …

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