查找双重无误错误的分配站点(使用valgrind)

|| 给定一个双重释放错误(由valgrind报告),是否有办法找出分配内存的位置? Valgrind只告诉我解除分配站点的位置(即对
free()
的调用),但是我想知道内存的分配位置。     
已邀请:
要使Valgrind跟踪分配堆栈跟踪,必须使用以下选项:
--track-origins=yes --keep-stacktraces=alloc-and-free
然后,在“ 3”警报之后,Valgrind将在“ 2”部分下报告分配堆栈。 如果您的应用程序很大,则
--error-limit=no --num-callers=40
选项也可能有用。     
我要做的第一项检查是验证错误确实是由于双重释放错误引起的。有时,运行程序(包括valgrind)可能会显示出双重释放错误,而实际上这是内存损坏问题(例如内存溢出)。 最好的检查方法是应用答案中详述的建议:如何使用gdb在C ++中跟踪双重释放或损坏错误。 首先,您可以尝试使用标志
fsanitize=address -g
编译程序。这将在运行时检测程序的内存,以跟踪所有分配,检测溢出等。 无论如何,如果问题确实是双重解决,则错误消息应包含所有必要的信息,以供您调试问题。     

要回复问题请先登录注册