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

0

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

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

Теги:
memory-leaks

1 ответ

4
Лучший ответ

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

  • 0
    как мне это сделать?
  • 0
    @NickXTsui с циклом for .
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню