как проверить утечку памяти в коде c? - PullRequest
0 голосов
/ 05 августа 2011

см. Я использую несколько раз malloc & free.

, поэтому в конце приложения я хочу убедиться, что нет утечки памяти.все malloc освобождаются.

Есть ли какой-либо метод или функция, чтобы увидеть это?

другой вопрос: все все операционные системы в основном восстанавливают память только тогда, когда это приложение завершается, но если предполагается, что приложение будет работать долгое время, и если таким образом оно непрерывно будет терять память, то в какой-то момент не будет свободной памятиприложение будет аварийно завершено или система перезагрузится ... !!Это правда .. ???

Ответы [ 4 ]

3 голосов
/ 05 августа 2011

В конце процесса ОС восстанавливает использованную память (поэтому она не может «вытекать»).

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

РЕДАКТИРОВАТЬ

Джеймс поднял интересный момент в комментариях: « Любой порядочный программист не должен полагаться на ОС, чтобы выполнять свою работу ».Я должен подчеркнуть, что я думал о следующем сценарии:

/* mallocs */

/* frees <- useless */
exit(0);
2 голосов
/ 05 августа 2011

Не гарантируется, что ОС восстановит вашу память. Настольная или серверная ОС обычно будет; встроенная ОС не может.

Существует несколько отладочных библиотек malloc; Google для debug malloc и использовать тот, который подходит вам. GNU libc имеет встроенную отладку malloc.

1 голос
/ 05 августа 2011

Во-первых, вы должны скомпилировать свой код с поддержкой отладки (в gcc это -g). Обратите внимание, что в этом нет необходимости, но это позволяет отладчику указывать номера строк в качестве одного из преимуществ.

Затем вы должны запустить свой код с помощью хорошего отладчика, такого как valgrind, gdb или чего-то еще. Они должны сообщать вам строки, в которых память была выделена, но не освобождена.

Valgrind - очень мощный инструмент для отладки. Вам нужно будет использовать параметр --tool = memcheck (который, я думаю, включен по умолчанию, но это не мешает узнать).

0 голосов
/ 05 августа 2011

Вы можете обернуть malloc() и free() и самостоятельно подсчитать некоторую базовую статистику

#define malloc(x) malloc_stat(x)
#define free(x) free_stat(x)

static counter = 0;

void* malloc_stat( size_t s ) {
    counter++;
    return malloc(s);
}

void free_stat( p ) {
    counter--;
    free(p);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...