Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用pthreads泄漏内存_C_Pthreads_Valgrind - Fatal编程技术网

C 使用pthreads泄漏内存

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

我正在使用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_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);