Я использую 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];
Какие-либо предложения?
Вы выделяете массив указателей. Вам нужно не только удалить массив, но и удалить каждый указатель в массиве. Очевидно, вам нужно сделать это до Вы удаляете массив.
Других решений пока нет …