Я разрабатываю приложение на C в среде Linux. Я заметил, что следующий код утечки тонн памяти после того, как только сотни казней:Отдельно pthread_create() утечка памяти
do {
pthread_t flushThread;
pthread_attr_t attr;
logevent_thread_t logThread = { Db , &do_curl };
if ((pthread_attr_init (&attr) == 0) &&
(pthread_attr_setdetachstate (&attr , PTHREAD_CREATE_DETACHED) == 0) ) {
pthread_create (&flushThread , &attr , (void*)FlushThread , (void*)&logThread);
pthread_attr_destroy (&attr);
}
} while(1);
Когда я начал с кодом, Я только использовал pthread_create(), но когда я заметил утечку, я начал google'd и искал StackOverflow и нашел следующие ссылки:
Вот почему я инициализировать ATT ребрами и начните нить «отсоединить». Я также уничтожаю атрибуты. Я не могу использовать pthread_join(), так как мне не нужен блокирующий вызов, я хочу, чтобы мой поток жил сам по себе.
К сожалению, утечка все еще существует. У меня больше нет идей, и вы получите дальнейшие советы!
Спасибо!
@arrowdodger: Вызов pthread_detach() без установки каких-либо атрибутов также утечки. Я также пробовал с setdetach и pthread_detach() без успеха.
@ drhirsch: Я знаю, что это утечка, потому что, когда у меня это работает в течение 1 дня, я получаю панику ядра «Из памяти». Additionnaly, используя верхнюю часть, я могу видеть все больше и больше воспоминаний, посвященных моему процессу (но я понимаю, что лучший способ изменить это - использовать valgrind).
Откуда вы знаете, что этот код утечки памяти? – hirschhornsalz