我的Valgrind装置是否损坏?
我有这个基本的Hello World代码:
#include <stdio.h>
int main() {printf("Hello World !"); return 0;}
然后valgrind给我这个总结:
总结:
== 17840 ==在退出时使用:在160个块中有22,114个字节
== 17840 ==总堆使用率:176个分配,16个释放,28,258字节分配
== == 17840
== 17840 ==泄漏摘要:
== 17840 ==绝对丢失:63块中的7,960个字节
== 17840 ==间接丢失:8个块中的6,888个字节
== 17840 ==可能丢失:3个块中有72个字节
== 17840 ==仍可访问:1个块中有32个字节
== 17840 ==抑制:85个块中的7,162个字节
根据valgrind的文件,“明确丢失”意味着可修复的泄漏,但是我没有看到任何可修复的泄漏,所以:
我的valgrind是否坏了?
(我在OSX Sierra 10.12.4上)
编辑:确切地说我的OSX版本(在我的Linux上,我选择“无泄漏是可能的”),我会尽快更新,当它完成时我会再次编辑它
你必须要求获得泄漏信息。 我正在致力于macOS Sierra 10.12.6(您应该升级;在10.12.4和10.12.6之间有固定的关键安全问题)。 我使用的是从SVN构建的Valgrind(Subversion - 尽管它正在转而使用Git)。
没有额外的选项
我有一个二叉搜索树程序,我只是删除了对内存自由函数的调用,并在我的valgrind
版本下运行它:
$ valgrind --suppressions=etc/suppressions-macos-10.12.5 -- ./bst29
==5095== Memcheck, a memory error detector
==5095== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==5095== Using Valgrind-3.13.0.SVN and LibVEX; rerun with -h for copyright info
==5095== Command: ./bst29
==5095==
1 3 5 7 10 18 20
==5095==
==5095== HEAP SUMMARY:
==5095== in use at exit: 22,476 bytes in 170 blocks
==5095== total heap usage: 186 allocs, 16 frees, 28,620 bytes allocated
==5095==
==5095== LEAK SUMMARY:
==5095== definitely lost: 24 bytes in 1 blocks
==5095== indirectly lost: 144 bytes in 6 blocks
==5095== possibly lost: 0 bytes in 0 blocks
==5095== still reachable: 0 bytes in 0 blocks
==5095== suppressed: 22,308 bytes in 163 blocks
==5095== Rerun with --leak-check=full to see details of leaked memory
==5095==
==5095== For counts of detected and suppressed errors, rerun with: -v
==5095== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 5 from 5)
$
请求 - --leak-check=full
请注意Rerun with --leak-check=full to see details of leaked memory
消息的Rerun with --leak-check=full to see details of leaked memory
信息:
$ valgrind --leak-check=full --suppressions=etc/suppressions-macos-10.12.5 -- ./bst29
==5098== Memcheck, a memory error detector
==5098== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==5098== Using Valgrind-3.13.0.SVN and LibVEX; rerun with -h for copyright info
==5098== Command: ./bst29
==5098==
1 3 5 7 10 18 20
==5098==
==5098== HEAP SUMMARY:
==5098== in use at exit: 22,476 bytes in 170 blocks
==5098== total heap usage: 186 allocs, 16 frees, 28,620 bytes allocated
==5098==
==5098== 168 (24 direct, 144 indirect) bytes in 1 blocks are definitely lost in loss record 30 of 45
==5098== at 0x100096861: malloc (vg_replace_malloc.c:302)
==5098== by 0x100000C50: main (bst29.c:30)
==5098==
==5098== LEAK SUMMARY:
==5098== definitely lost: 24 bytes in 1 blocks
==5098== indirectly lost: 144 bytes in 6 blocks
==5098== possibly lost: 0 bytes in 0 blocks
==5098== still reachable: 0 bytes in 0 blocks
==5098== suppressed: 22,308 bytes in 163 blocks
==5098==
==5098== For counts of detected and suppressed errors, rerun with: -v
==5098== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 14)
$
修复bst29.c
程序后
在释放树释放代码的情况下,输出为:
$ valgrind --leak-check=full --suppressions=etc/suppressions-macos-10.12.5 -- ./bst29
==5124== Memcheck, a memory error detector
==5124== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==5124== Using Valgrind-3.13.0.SVN and LibVEX; rerun with -h for copyright info
==5124== Command: ./bst29
==5124==
1 3 5 7 10 18 20
==5124==
==5124== HEAP SUMMARY:
==5124== in use at exit: 22,308 bytes in 163 blocks
==5124== total heap usage: 186 allocs, 23 frees, 28,620 bytes allocated
==5124==
==5124== LEAK SUMMARY:
==5124== definitely lost: 0 bytes in 0 blocks
==5124== indirectly lost: 0 bytes in 0 blocks
==5124== possibly lost: 0 bytes in 0 blocks
==5124== still reachable: 0 bytes in 0 blocks
==5124== suppressed: 22,308 bytes in 163 blocks
==5124==
==5124== For counts of detected and suppressed errors, rerun with: -v
==5124== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 14 from 14)
$
这对我来说是Mac上的正常结果 - 一切都被压制了。
Suppressions文件
列出的抑制文件包含10个用于各种形式的系统泄漏的条目:
{
macOS-Sierra-10.12.5-Leak.1
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc_zone_malloc
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
fun:_objc_init
fun:_os_object_init
}
{
macOS-Sierra-10.12.5-Leak.2
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc_zone_malloc
fun:NXCreateHashTableFromZone
fun:NXCreateHashTable
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
}
{
macOS-Sierra-10.12.5-Leak.3
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc_zone_malloc
fun:NXCreateHashTableFromZone
fun:NXCreateHashTable
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
}
{
macOS-Sierra-10.12.5-Leak.4
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:NXCreateHashTableFromZone
fun:NXCreateHashTable
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
}
{
macOS-Sierra-10.12.5-Leak.5
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
fun:_objc_init
fun:_os_object_init
}
{
macOS-Sierra-10.12.5-Leak.6
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc_zone_calloc
fun:_NXHashRehashToCapacity
fun:NXHashInsert
fun:NXCreateHashTableFromZone
fun:NXCreateHashTable
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
}
{
macOS-Sierra-10.12.5-Leak.7
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
fun:_objc_init
fun:_os_object_init
fun:libdispatch_init
fun:libSystem_initializer
fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
fun:_ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE
}
{
macOS-Sierra-10.12.5-reachable.1
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc_zone_calloc
fun:_NXHashRehashToCapacity
fun:NXHashInsert
fun:NXCreateHashTableFromZone
fun:NXCreateHashTable
fun:NXCreateMapTableFromZone
fun:NXCreateMapTableFromZone
fun:_ZL18__sel_registerNamePKcii
fun:sel_init
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
}
{
macOS-Sierra-10.12.5-possible.1
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:map_images_nolock
fun:_ZN11objc_object21sidetable_retainCountEv
fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoEbb
fun:_ZN4dyld21registerObjCNotifiersEPFvjPKPKcPKPK11mach_headerEPFvS1_S6_ESC_
fun:_dyld_objc_notify_register
fun:_objc_init
fun:_os_object_init
fun:libdispatch_init
fun:libSystem_initializer
fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
fun:_ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE
}
{
macOS-Sierra-10.12.5-check.1
Memcheck:Param
msg->desc.port.name
fun:mach_msg_trap
fun:mach_msg
fun:task_set_special_port
fun:_os_trace_create_debug_control_port
fun:_libtrace_init
fun:libSystem_initializer
fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
fun:_ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE
fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjPKcRNS_21InitializerTimingListERNS_15UninitedUpwardsE
fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjPKcRNS_21InitializerTimingListERNS_15UninitedUpwardsE
fun:_ZN11ImageLoader19processInitializersERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE
}
它们都来自调用main()
之前的启动代码; 因此,我无能为力。
上一篇: Is my valgrind installation broken?
下一篇: uninitialised memory in my singly linked list implementation