C 使用pthreads泄漏内存
我正在使用pthreads,根据valgrind的说法,我正在泄漏内存,就像在 最上面的答案是,如果pthread_加入所有线程,这个内存将被回收,但这不是我的C 使用pthreads泄漏内存,c,pthreads,valgrind,C,Pthreads,Valgrind,我正在使用pthreads,根据valgrind的说法,我正在泄漏内存,就像在 最上面的答案是,如果pthread_加入所有线程,这个内存将被回收,但这不是我的 pthread_t threads[NUM_THREADS]; ... for (i = 0; i < NUM_THREADS; i++) { pthread_create(&threads[i], &attr, Worker, NULL); } ... for (i = 0; i < NUM_THR
pthread_t threads[NUM_THREADS];
...
for (i = 0; i < NUM_THREADS; i++) {
pthread_create(&threads[i], &attr, Worker, NULL);
}
...
for (i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
我做错了什么,还是上面的答案不正确?这不是真正的泄漏,您可以放心地忽略它。内存块
pthread_create
allocates用于扩展线程堆栈,它不会被释放。库可能会使用相同的内存区域来调用pthread\u create
我可能要迟到了。正如所指出的,它必须没有任何内存泄漏-我检查了您所做的工作,这是创建(为线程创建内部内存)和加入线程(自动回收此内存)的标准方式
但是,您尚未显示attr的初始化
你可以试着做:
pthread_create(&threads[i], NULL, Worker, NULL);
我在这里放置了NULL,而不是attr的任何值。pthread初始化与属性紧密耦合(除非它作为NULL提供) 您是否还尝试为每个线程调用pthread_destroy()?添加了Valgrind输出。pthread_destroy()对我来说似乎不存在……在以前的一个项目中,我使用了pthreads,没有这个问题,但在这个项目中我是。为什么这次会发生这种事?我以完全相同的方式启动和停止线程。这可能是因为库版本。如果您愿意,请查看allocate_stack函数的代码:这是令人困惑的部分,我pthread_连接每个线程,但仍然存在漏洞。
pthread_create(&threads[i], NULL, Worker, NULL);