给定一个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
选项也可能有用。