Программа C ++ с Perfomance Tool - утечки - PullRequest
1 голос
/ 24 марта 2011
int main (int argc, char * const argv[])
{
    int *num = new int[100] ;
    return 0;
}

В вышеуказанной программе определенно утечки памяти . Но когда Run -> Run with Performance Tool -> Leaks , выдает следующий рисунок, на котором нет утечек. Что мне не хватает? Инструмент производительности работает только для Objective C окружающей среды?

image

Изменить:

В MSVC ++ 2010 легко обнаружить утечки при работе в режиме отладки -

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int main (int argc, char * const argv[])
{
    int *num = new int[100] ;

    _CrtDumpMemoryLeaks();   // Looking for something equivalent to this
                             // that lets me know whether the program has
                             // memory leaks on an XCode environment.

    return 0;
}

1 Ответ

2 голосов
/ 24 марта 2011

leaks не выполняет посмертный дамп блоков, которые не были освобождены.

Вместо этого он анализирует процесс во время его работы и ищет выделенные блоки, которые больше не доступны.Он сканирует по требованию или каждые 10 секунд.

Измените вашу программу на что-то вроде следующего:

int main (int argc, char * const argv[]) 
{
    int *num = new int[100] ;
    char c;

    puts("memory allocated\npress a key to continue...\n");
    c = getchar();

    num = NULL; // leak the allocation

    puts("memory has been leaked\npress a key to continue...\n");
    c = getchar();

    return 0; 
}

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

...