Debugging 如何解决valgrind池分配器问题?

Debugging 如何解决valgrind池分配器问题?,debugging,environment-variables,valgrind,Debugging,Environment Variables,Valgrind,当我在代码上运行Valgrind时,我得到了数千个 12 bytes in 1 blocks are possibly lost in loss record 545 of 29,459 at 0x7FCC050: operator new(unsigned int) (vg_replace_malloc.c:214) by 0x87E39B1: __gnu_cxx::new_allocator<T>::allocate(unsigned int, void const*

当我在代码上运行Valgrind时,我得到了数千个

12 bytes in 1 blocks are possibly lost in loss record 545 of 29,459
   at 0x7FCC050: operator new(unsigned int) (vg_replace_malloc.c:214)
   by 0x87E39B1: __gnu_cxx::new_allocator<T>::allocate(unsigned int, void const*) (new_allocator.h:89)
   ...
   ...
1个块中的12个字节可能在29459的丢失记录545中丢失
在0x7FCC050处:运算符新(无符号整数)(vg_替换_malloc.c:214)
通过0x87E39B1:uu gnu_cxx::new_分配器::allocate(unsigned int,void const*)(new_分配器.h:89)
...
...
从各种帖子中,我可以确定这“不是一个bug,而是一个特性”,因为gnu库通过这种方式为stl提供了高效的分配。这就是说,看到数千个这样的漏洞,很难找到真正的漏洞

如何设置Valgrind以不显示这些错误


注意:我已尝试设置环境变量
GLIBCXX\u FORCE\u NEW G\u SLICE=always malloc G\u DEBUG=gc友好的常驻模块
,并且没有任何更改

使用
valgrind--gen suppressions=yes
为显示的错误生成抑制语句。然后,您可以使用
--suppressions=

重新运行valgrind,并抑制这些错误消息。您是否尝试了中关于禁用alloc池的建议?请注意,环境变量的变化取决于所使用的gcc版本。

这也是我现在删除的答案:)但是,如果您禁用运算符new,valgrind还有什么剩余?您使用的valgrind/gcc/libc/(可能还有发行版)是什么版本?我从来没有遇到这些问题时,我的C++代码检查。GCC版本3.4.2,Valgn2.2.0,GLUBC 2.3.3-93.103.4080.PTF.48 631,SUSELIUXXY版本严重过时。难道不能用更先进的软件进行测试吗?这一个差不多有5-7岁了。从那时起,这个问题一定已经解决了。不幸的是,这些都是我工作的公司维护的,我对他们使用的软件没有控制权。如果你指的是GLIBCXX\u FORCE\u NEW,那就没用了。您指的是禁用alloc池的另一种方法吗?是的,但是,经过进一步调查,似乎存在gcc错误()。存在一个潜在的争用条件,其中用于强制使用new的变量可能超过1,而pool_allocator.h中的测试为for==1。不幸的是,该bug中描述的修复似乎没有包含在任何gcc版本中。