如何解决查找双重无误错误的分配站点使用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
编译程序。这将在运行时检测程序的内存,以跟踪所有分配,检测溢出等。
无论如何,如果问题确实是双重解决,则错误消息应包含所有必要的信息,以供您调试问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。