寻找双免费错误的分配网站(用valgrind)

给定一个double-free错误(由valgrind报告),有没有办法找出内存分配的位置? Valgrind只告诉我释放站点的位置(即对free() )的调用,但我想知道内存分配的位置

为了让Valgrind保留分配堆栈跟踪的轨迹,你必须使用选项:

 --track-origins=yes --keep-stacktraces=alloc-and-free 

然后Valgrind将报告Block was alloc'd at下的分配堆栈Block was alloc'd at分配Address ... inside a block of size x free'd alert Address ... inside a block of size x free'd之后。

如果您的应用程序很大,– --error-limit=no --num-callers=40选项也可能有用。