2015-12-11 4 views
1

Есть ли способ проверить, был ли массив полностью освобожден, и ничего не осталось? Valgrind только говорит, что есть некоторые разборчивые блоки. Отладчик или что-то в этом роде сделано именно для этого?Проверьте, освобожден ли массив/2d массив/массив структур/массив строк

+2

Что вы имеете в виду? Для двумерного массива требуется один «свободный», то же самое для 'struct {...} x []'. Остальное вам уже сказал Valgrind. Вы действительно должны знать, где/который выделил блокировать вас 'free'd. И отладчик сделан для - хорошо отладки ... – Olaf

+0

@Olaf есть версия Windows «Valgrind», я просто спрашиваю? – Michi

+0

@ user3706129 Вы имеете в виду указатель ...? – Michi

ответ

2

Итак, нет, нет способа узнать, освободили ли вы все, просто взглянув на указатели. Вы должны знать свою структуру данных и алгоритм и знать, когда выпустить выделенную память.

В Windows (MSC) Я использую следующую команду для проверки в конце, когда программа завершается, если я освободила всю выделенную память:

// Check heap upon exit: all memory freed and not corrupted? 
#include <crtdbg.h> 
_CrtMemState memStateStart, memStateEnd, memStateDelta; 

int WinMain(... 
{ 
    ... 
    // Make a checkpoint of the heap's state so we can later check the heap is still OK 
    _CrtMemCheckpoint(&memStateStart); 

    ghMainWnd = CreateWindow(       // Create the app. main window 
      ... 
    ); 
    ... 
} 
... 
WndProc(hWnd, msg,...) 
{ 
    ... 
      case WM_CLOSE: 
        // Check the heap 
        _CrtMemCheckpoint(&memStateEnd); 
        _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW); 
        _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW); 
        _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW); 
        if (_CrtMemDifference(&memStateDelta, &memStateStart, &memStateEnd)) 
         _CrtMemDumpStatistics(&memStateDelta); 
        _CrtDumpMemoryLeaks(); 
        DestroyWindow (hWnd); 
        return (0); 
Смежные вопросы