【发布时间】:2019-06-23 11:04:25
【问题描述】:
我有关于丢失记忆的 valgrind 错误的问题。 这是我的代码:
if((err = pthread_create(&handlert, NULL, &handler, NULL)) != 0) perror(..)
if((err = pthread_create(&mastert , NULL, &createmaster, NULL)) != 0) perror(..)
for(int i = 0; i < THREADSINPOOL; i++) {
if((err = pthread_create(&(f[i]), NULL, &createpool, NULL)) != 0) perror(..)
}
if((err = pthread_join(handlert,(void*) &sRet[1])) != 0) perror(..)
if((err = pthread_join(mastert,(void*) &lRet[1])) != 0) perror(..)
for(int i = 0; i < THREADSINPOOL; i++) {
if((err = pthread_join(f[i], (void*) &wRet[i])) != 0) perror(..)
}
return 0;
我对每个线程都有一个连接,我正在检查结果,但 valgrind 仍然说:
==21610== 560 bytes in 1 blocks are possibly lost in loss record 8 of 12
==21610== at 0x4C2CC90: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==21610== by 0x4012E44: allocate_dtv (dl-tls.c:296)
==21610== by 0x4012E44: _dl_allocate_tls (dl-tls.c:460)
==21610== by 0x4E3FCC0: allocate_stack (allocatestack.c:589)
==21610== by 0x4E3FCC0: pthread_create@@GLIBC_2.2.5 (pthread_create.c:495)
==21610== by 0x401B3B: main (myfile.c:85)
(每次创建 pthread 时都会出现相同的错误,仅更改代码行) 提前谢谢!
编辑: 编译中的标志:--leak-check=full -std=c99 -Wall -pedantic -g -DMAKE_VALGRIND_HAPPY 只有这个错误(看起来不像是以前错误的结果)
【问题讨论】:
-
你的 valgring 版本是什么?
-
@n.m.valgrind-3.10.0
-
你可能想升级,我的是 3.13.0。
-
@n.m.我需要使用这个版本,因为它是大学的一个项目,他们检查这个版本。
-
你能发一个 minimal reproducible example 来证明 valgrind 报告误报吗?
标签: c memory-leaks valgrind