下面是我的代码的一个简单版本:
#include <pthread.h>
#include <stdio.h>
void* handle_client(void* arg);
int main(int argc, char *argv[])
{
pthread_t pthr_handle;
pthread_create(&pthr_handle, NULL, &handle_client, NULL);
pthread_detach(pthr_handle);
pthread_exit(NULL);
return 0;
}
void* handle_client(void* arg)
{
printf("Hello from thread!\n");
pthread_exit(NULL);
return NULL;
}
当我在这个程序上使用valgrind时,它说
可能丢失:1个数据块中272个字节
问题是,并不是每次我运行它的时候它都这么说。有时候它会说没有泄漏。正因为如此,我相信没有泄漏,而且消息与主线程退出后仍在运行的线程有关。pthread_exit调用不是应该让主线程等待其他线程退出吗?我能做些什么让valgrind停止指责内存泄漏吗?
1条答案
按热度按时间tzdcorbm1#
Valgrind无法处理分离线程在主线程之后退出时执行的清理。
运行valgrind时,添加
--gen-suppressions=yes
标志:在上面的输出中,如果您对打印抑制响应“Y”,则会生成一个抑制记录。您可以将此记录添加到文件中(在显示““的位置添加一个名称<insert_a_suppression_name_here>),然后可以使用
--suppressions
标志将此文件传递给valgrind:现在它显示为“抑制”泄漏,即您知道并可以安全忽略的泄漏。