You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让代码打印的内存地址与Valgrind泄漏报告中的地址匹配?

解决Valgrind泄漏地址与程序打印地址不匹配的问题

问题原因

直接运行程序和通过Valgrind运行时,程序的虚拟地址空间完全独立:Valgrind的Memcheck工具会接管内存分配逻辑,重新构建内存环境,两次运行的内存布局完全不同,因此地址无法对应。

解决方法

要让程序打印的地址和Valgrind报告的地址一致,必须在Valgrind环境下运行程序并触发地址打印,具体步骤如下:

  • 保留代码中的地址打印逻辑(比如你原有的cout << "Address of classy is " << classy << endl;)。
  • 使用Valgrind运行程序时,同时捕获程序的标准输出和Valgrind的报告输出,执行命令:
    valgrind --leak-check=full ./你的程序名 2>&1 | tee valgrind_log.txt
    
    这条命令会把程序打印的地址和Valgrind的泄漏报告同时输出到终端,并保存到valgrind_log.txt文件中。
  • 查看终端输出或日志文件,此时程序打印的地址会和Valgrind泄漏报告中的地址完全匹配。

额外提示

编译程序时务必添加-g参数生成调试信息,这样Valgrind的报告不仅会显示泄漏地址,还会明确标注对应的代码行号,进一步提升排查效率。

内容的提问来源于stack exchange,提问作者K Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:58:01