• valgrind----告警


    Valgrind调试代码时的一些错误提示解析

    ciaiy 2018-07-29 22:46:10 3312 收藏 4
    文章标签: valgrind 内存泄露
    版权
    最近在写代码的时候, 发现了极其严重的内存泄漏. 娄神帮我找bug时, 使用了valgrind这个软件. Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具.
    下面解析一些常见的错误 :

    1.
    ==3185== Use of uninitialised value of size 8
    ==3185== at 0x108602: main (a.c:6)

    这种情况是很常见的, 原因是使用了未初始化的的地址, 这时候应该查看一下程序是否使用了未初始化的指针
    1
    2.

    ==3223== Invalid write of size 4
    ==3223== at 0x108602: main (a.c:6)8
    ==3223== Address 0x0 is not stack’d, malloc’d or (recently) free’d

    这个错误原因是往错误的地址写入值, 这时候我们也应该查看一下程序用未初始化的指针赋值, 或者指针未被赋值.
    和这个错误相对应的, 还有Invalid read of size 4错误提示.
    1
    2
    3.
    ==3397== Conditional jump or move depends on uninitialised value(s)
    ==3397== at 0x108656: main (in /home/ciaiy/Desktop/codingSpace/c/free/a)

    这个错误原因是变量未被初始化, 就被使用
    1
    4.
    ==3886== Invalid free() / delete / delete[] / realloc()
    ==3886== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
    ==3886== by 0x1086CD: main (a.c:10)

    这个错误原因是free掉了不属于自己的空间, 错误原因有可能是指针指向的内存不再属于它了
    1
    5.
    ==3839== HEAP SUMMARY:
    ==3839== in use at exit: 412 bytes in 1 blocks
    ==3839== total heap usage: 2 allocs, 1 frees, 924 bytes allocated

    最后一个是堆内存分析, 如上面的提示所示, 程序在退出时, 仍有412字节的空间未被free
    =============================================================================================

    在LEAK SUMMARY中:
    l  definitely lost:表明没有任何指针指向该区域,已经造成了内存泄漏。
    l  possibly lost:存在指针指向内存中的某个位置,valgrind认为你有可能是在做一些其他的高级应用(将指针放在申请的内存块中间)
    l  still reachable:仍有指针引用该内存块,只是没有释放而已,可以通过设置—show-reachable=yes来报错。

     
    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
    构建调试Linux内核网络代码的环境MenuOS系统
    基于java的socket简单聊天编程
    ping命令研究报告
    什么是JMM?
    ssm框架整合,个人学习记录
    Intellij idea兼容 Eclipse 快捷键 (仅个人学习回顾,防止遗忘)
    java基础随记 持续完善中
    win10 安装Ubuntu子系统 整合排坑
  • 原文地址:https://www.cnblogs.com/axjlxy/p/15205093.html
Copyright © 2020-2023  润新知