Ubuntu18.04使用Valgrind进行C++程序的内存泄露分析

使用Valgrind进行C++程序的内存泄露分析

安装Valgrind

sudo apt-get install valgrind

编译成debug版本的可执行程序

为了方便定位具体问题代码位置,首先是将自己的代码编译成debug版本的可执行程序,编译完成后可以验证下是否为debug版本,输入如下命令:

readelf -S your_program |grep debug

如果输出了debug字眼,则说明是debug版本,如果什么都没输出,则表示不是debug版本。
如下图:
在这里插入图片描述

注意,编译debug版本的时候不要用strip

然后用valgrind执行自己编译的可执行程序,具体命令如下:

valgrind --tool=memcheck --leak-check=full --track-origins=yes --log-file=log ./your_program

–leak-check=full选项启用完全的泄露检查,
–track-origins=yes跟踪内存分配的来源,以便更准确地定位问题。
./your_program是你想要运行并检测内存泄露的程序。
–undef-value-errors=no:不检查未定义的值错误;
–log-file=log:将日志信息输出到 log 文件中;

注意,编译debug版本的时候不要用strip来去掉一些自己感觉没用的东西,在最终确定没有问题的时候,编译debug版时可以再去掉,我第一次编译debug版本的时候,就是用了strip,编出来的库只有17.8M,但是用了valgrind工具不能直接定位到出问题的代码行数,而是报了一个库的地址,,如下图所示,我尝试用addr2line命令还找不到具体的代码行数,addr2line的具体命令在文末。
在这里插入图片描述

最后编译debug版本的时候,没用strip,库的大小变为80M,再做内存泄露分析就会直接定位到问题代码行数了,如下图所示:
在这里插入图片描述

地址转为代码行

addr2line -e ./your_program -f 0x49B3B11

-e 后跟自己的文件名称
-f 会输出代码行数
0x49B3B11 表示具体的地址

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 18.04上使用SegNet进行室内布局语义分割是可行的。SegNet是一种基于卷积神经网络的语义分割模型,主要用于图像语义分割任务。 首先,需要在Ubuntu 18.04上安装SegNet的相关软件和依赖库。可以使用pip或conda来安装必要的Python库,如Keras、TensorFlow等。同时,还需要下载SegNet的预训练模型或自行训练模型。 接下来,为了进行室内布局语义分割,需要获取用于训练和测试模型的室内布局图像数据集。这些数据集应包含室内不同场景的图像,并且每张图像都应有对应的标签,标明图像中每个像素点的语义类别。 在数据准备完毕后,可以进行训练模型。使用SegNet的预训练模型或通过在自己的数据集上进行训练,得到一个在室内布局语义分割任务上表现良好的模型。 接下来,可以使用训练好的模型对新的室内布局图像进行语义分割。将图像输入到SegNet模型中,模型将为图像的每个像素点预测对应的语义类别。可以使用预测结果来进一步分析室内布局,如识别墙壁、地板、家具等。 最后,可以根据语义分割结果进行室内布局相关的应用,如室内设计、虚拟现实等。通过将语义分割结果与其他信息(如家具模型、用户需求等)结合,可以帮助进行室内布局规划和设计。 总之,在Ubuntu 18.04上使用SegNet进行室内布局语义分割是一种有效的方法,可以通过构建适当的数据集、训练模型和使用预测结果来帮助室内布局相关的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值