Это плохая идея free
памяти перед выходом () ing.Это бесполезно тратит время, и в многопоточных программах это может привести к ошибкам, если другие потоки не присоединяются первыми, и может получить доступ к некоторой выделенной памяти.1007 * утечка.Подумайте:
#include <stdlib.h>
void *a_global;
int main() {
void *a_local = malloc(10);
a_global = malloc(20);
}
gcc -g t.c && valgrind ./a.out
==12228== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==12228== Using Valgrind-3.7.0.SVN and LibVEX; rerun with -h for copyright info
==12228== Command: ./a.out
==12228==
==12228==
==12228== HEAP SUMMARY:
==12228== in use at exit: 30 bytes in 2 blocks
==12228== total heap usage: 2 allocs, 0 frees, 30 bytes allocated
==12228==
==12228== LEAK SUMMARY:
==12228== definitely lost: 10 bytes in 1 blocks
==12228== indirectly lost: 0 bytes in 0 blocks
==12228== possibly lost: 0 bytes in 0 blocks
==12228== still reachable: 20 bytes in 1 blocks
==12228== suppressed: 0 bytes in 0 blocks
Здесь, к тому времени, как вы достигли выхода, a_local
уже вышел из области видимости.Существует нет способ освободить эту память;это потеряно навсегда.Это утечка.
OTOH, вы могли бы легко освободить a_global
(вы просто не должны), она достижима, и не утечка.