2011-06-20 62 views
1

我正在Linux环境中开发一个C应用程序。我注意到下面的代码只有数百处决后泄漏吨的记忆:分离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 ributes并启动线程“分离”。我也摧毁了这些属性。 我不能使用pthread_join(),因为我不想阻塞呼叫,我想让我的线程独立生活。

不幸的是,泄漏仍然存在。我没有更多的想法,并会得到任何进一步的建议!

谢谢!


@arrowdodger:调用pthread_detach()而不设置任何类型的属性也会泄漏。 我也试过用setdetach和pthread_detach()没有成功。

@drhirsch:我知道它泄漏,因为当我运行了一天,我得到一个“内存不足”内核恐慌。另外,使用top可以看到越来越多的memoery专注于我的过程(但我明白,最好的方法是使用valgrind)。

+0

你怎么知道这段代码泄漏内存? – hirschhornsalz

回答

0

我从你的链接中读到的是你应该调用pthread_detach(),而不是使用DETACHED属性创建它。