valgrind用法梳理

简介

Valgrind 和GDB是C编程中的两大debug神器,valgrind相比于gdb,没有那么受欢迎,但是在解决偶发型错误,以及内存泄漏等问题时,绝对是一把好手。

今天就结合CS51C这门宝藏课程谈一下valgrind的用法。

参考链接:

Lab 2 | CS 61C Fall 2023

基于bork.cc的编译,然后使用

valgrind ./bork hello

基于下列输出,我们可以确认,存在invalid read os size 1, 并且发生在strlen这个函数中。

基于这个信息,我们很容易联想到,strnlen中的字符串不包含终止符号,所以读取了无效内存。再修复了上述错误后,我们在此运行相同的指令。

基于Leak summary的分析,还是存在内存泄漏。如下图所展示。

我们根据建议,执行

valgrind --leak-check=full ./bork hello

、valgrind在这里展示的信息是:泄漏的内存是如何初始化的,从上述可以看出,是调用alloc_str造成了内存泄漏。针对对应创建的对象,我们进行free就可以解决该问题。最后可以看出,一切正常。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值