admin管理员组文章数量:1567522
仅记录个人使用中遇到的问题,可能不会很多,以后慢慢补充
Valgrind问题总结
- 1.Conditional jump or move depends on uninitialised value(s)
- 2.xxx blocks are still reachable in loss record xxx of xxx
- 3.still reachable: xxx bytes in xxx blocks
- 4.Invalid free() / delete / delete[]
- 4.1非法释放野指针
- 4.2重复释放内存
- 4.3此问题补充
- 5.Invalid write of size xxx
- 6.FILE DESCRIPTORS: xx open at exit.
- 7.xx bytes in 1 blocks are definitely lost in loss record xx of xx
1.Conditional jump or move depends on uninitialised value(s)
某些变量未初始化,检查一下数组/class/struct有没有赋初值,或者说看看初始化的大小是否为正确的大小,下面信息会提示在哪个函数里面。
2.xxx blocks are still reachable in loss record xxx of xxx
程序员创建的内存块没有被主动释放,注意使用后的malloc/calloc
内存要free,这种情况一般不会造成什么大问题。当然,另一个层面上的"still reachable"的意思是程序中的某个指针丢失,无法指向原来的内容,则无法释放,才是真正意义上的内存泄漏。
3.still reachable: xxx bytes in xxx blocks
和上面的情况类似,可能是malloc或者calloc后未释放(free),或者打开的文件忘了fclose
,具体情况可以在valgrind运行命令后加上-show-reachable=yes
看看问题出在哪里
4.Invalid free() / delete / delete[]
这个时候就分两种情况了。
4.1非法释放野指针
非法释放野指针的话就会有这样的提示在第三行:by 0xyyyyyyyy: mem_free_wild_pointer (in 你的程序路径)
,不知道野指针是啥的自己百度。
4.2重复释放内存
重复释放内存的提示稍有不同:by 0xyyyyyyyy: mem_double_free (in 你的程序路径)
,这个报错的意思就是你double free
(即重复释放同一块内存)了,检查一下重复free的情况,只free一次即可。
4.3此问题补充
此报错下面还有一部分,就是类似于Address 0xxxxxxxx is 0 bytes inside a block of size 1 free'd
这种提示,无伤大雅。
5.Invalid write of size xxx
动态内存越界,下面还有Address 0xxxxxxxxx is 0 bytes inside a block of size 1 alloc'd
,可以检查一下数组下标之类的。
6.FILE DESCRIPTORS: xx open at exit.
文件指针未关闭,类似这样提示的不用管:
Open file descriptor 0: /dev/pts/4
<inherited from parent>
真正有问题的提示,下面还会给一堆信息告诉你在哪,一般从下往上开始读,比如:
Open file descriptor 3: test.txt
at xxxxxxxx
by xxxxxxxx
by xxxxxxxx
......
7.xx bytes in 1 blocks are definitely lost in loss record xx of xx
这个是说下面提示信息中的内存"definitely lost"(肯定泄露),一般也是类似于malloc了没有free
版权声明:本文标题:Linux:开发:valgrind报错问题总结(2022新) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725886538a1047072.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论