Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Valgrind显示内存泄漏,主存为空,不包括标头 Lubuntu 15.10_C++_Memory Leaks_Valgrind - Fatal编程技术网

C++ Valgrind显示内存泄漏,主存为空,不包括标头 Lubuntu 15.10

C++ Valgrind显示内存泄漏,主存为空,不包括标头 Lubuntu 15.10,c++,memory-leaks,valgrind,C++,Memory Leaks,Valgrind,我有一个内存泄漏的项目。我可以找到它们,所以我清理了main.cpp文件,现在看起来是这样的: int main() { return 0; } 当我使用命令检查内存时: valgrind--leak check=full--show leak types=all./MyProgram>log1.txt 2>&1 我犯了以下错误: ==5219== ==5219== LEAK SUMMARY: ==5219== definitely lost: 0 bytes in 0 bloc

我有一个内存泄漏的项目。我可以找到它们,所以我清理了main.cpp文件,现在看起来是这样的:

int main()
{
   return 0;
}
当我使用命令检查内存时:

valgrind--leak check=full--show leak types=all./MyProgram>log1.txt 2>&1

我犯了以下错误:

==5219== 
==5219== LEAK SUMMARY:
==5219==    definitely lost: 0 bytes in 0 blocks
==5219==    indirectly lost: 0 bytes in 0 blocks
==5219==      possibly lost: 728 bytes in 18 blocks
==5219==    still reachable: 44,676 bytes in 224 blocks
==5219==                       of which reachable via heuristic:
==5219==                         newarray           : 832 bytes in 16 blocks
==5219==         suppressed: 0 bytes in 0 blocks
==5219== 
==5219== For counts of detected and suppressed errors, rerun with: -v
==5219== ERROR SUMMARY: 18 errors from 18 contexts (suppressed: 0 from 0)
其中一些错误是:

==5219== 2,048 bytes in 1 blocks are still reachable in loss record 240 of 242
==5219==    at 0x402E2EC: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==5219==    by 0x5F7C151: g_realloc (in /lib/i386-linux-gnu/libglib-2.0.so.0.4600.2)
==5219==    by 0x5F06BCB: g_value_register_transform_func (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x5F08D6A: ??? (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x5ED9A2D: ??? (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x400EDCF: call_init.part.0 (dl-init.c:72)
==5219==    by 0x400EEDF: call_init (dl-init.c:30)
==5219==    by 0x400EEDF: _dl_init (dl-init.c:120)
==5219==    by 0x4000ACE: ??? (in /lib/i386-linux-gnu/ld-2.21.so)

==5219== 8 bytes in 1 blocks are possibly lost in loss record 95 of 242
==5219==    at 0x402E0D8: calloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==5219==    by 0x5F7C0DA: g_malloc0 (in /lib/i386-linux-gnu/libglib-2.0.so.0.4600.2)
==5219==    by 0x5EFC587: ??? (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x5F011B8: g_type_register_fundamental (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x5EE929E: ??? (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x5ED9A1E: ??? (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4600.2)
==5219==    by 0x400EDCF: call_init.part.0 (dl-init.c:72)
==5219==    by 0x400EEDF: call_init (dl-init.c:30)
==5219==    by 0x400EEDF: _dl_init (dl-init.c:120)
==5219==    by 0x4000ACE: ??? (in /lib/i386-linux-gnu/ld-2.21.so)
完整日志文件:

我如何解决这个问题?我该怎么办?

泄漏不是源于您的代码 以最少的编辑记录评论


添加抑制;它们是由启动代码引起的漏洞,这些代码不能由您来修复,可能不会被C++运行时的开发人员所固定。这在Mac OS X上是一个广泛的问题。启动代码通常会分配许多分配和几十KB的内存。(选项包括
--gen suppressions=all
--suppressions=suppressions file

这收集了以下评论:

致命:无法打开抑制文件“抑制文件”

这得到了回应(因为我发表评论时受到时间压力):

阅读手册。使用
--gen suppressions=all
生成抑制[…]。然后编辑该文件(有一个占位符,您应该在其中为每个抑制项放置一个ID/名称)。然后,您可以在后续运行中使用您创建的文件名
--suppressions=name
。您可能需要
--show leak kinds=all
,也可能需要其他一些(
-leak check=full
)。使用
valgrind--help
,但要注意输出相当广泛

工作示例-Mac OS X 10.11.4 源(
mincpp.cpp
) 汇编 (我通常会使用更多的警告选项,但有了这段代码,就真的没有必要了。)

使用
valgrind
对于这样一个最小的程序来说,这是一个很大的漏洞

未知的
fcntl
消息令人讨厌,但似乎“基本无害”;我可能需要再次重建
valgrind

产生抑制 编辑
min.suppressions
删除以
==
--
开头的行;剩下的是压制。添加抑制项的名称。最终结果类似于:

{
   Mac-OSX-10.11.4-GCC-5.3.0-C++-Suppressions-001
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc_zone_malloc
   fun:_read_images
   fun:object_setClass
   fun:gc_init
   fun:preopt_init
   fun:map_images_nolock
   fun:_ZL25batchFinalizeOnTwoThreadsP14_malloc_zone_tPFvP16auto_zone_cursorPFvPvS3_ES3_ES2_m
   fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
   fun:_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE
   fun:dyld_register_image_state_change_handler
   fun:_objc_init
   fun:_os_object_init
}
{
   Mac-OSX-10.11.4-GCC-5.3.0-C++-Suppressions-002
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc_zone_malloc
   fun:_read_images
   fun:object_setClass
   fun:NXHashInsert
   fun:_read_images
   fun:map_images_nolock
   fun:_ZL25batchFinalizeOnTwoThreadsP14_malloc_zone_tPFvP16auto_zone_cursorPFvPvS3_ES3_ES2_m
   fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
   fun:_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE
   fun:dyld_register_image_state_change_handler
   fun:_objc_init
   fun:_os_object_init
}
…
{
   Mac-OSX-10.11.4-GCC-5.3.0-C++-Suppressions-021
   Memcheck:Leak
   match-leak-kinds: definite
   fun:malloc_zone_memalign
   fun:_ZL11addSubclassP10objc_classS0_
   fun:_ZL12realizeClassP10objc_class
   fun:_ZL12realizeClassP10objc_class
   fun:_ZN4dyldL12notifySingleE17dyld_image_statesPK11ImageLoader
   fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
   fun:_ZN11ImageLoader19processInitializersERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
   fun:_ZN11ImageLoader19processInitializersERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
   fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE
   fun:_ZN4dyld24initializeMainExecutableEv
   fun:_ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_Pm
   fun:_ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_Pm
}
使用
--suppressions=./min.suppressions重新运行

这表明以前报告的错误现在已被抑制

添加抑制;它们是由启动代码引起的漏洞,这些代码不能由您来修复,可能不会被C++运行时的开发人员所固定。这在Mac OS X上是一个广泛的问题。启动代码通常会分配许多分配和几十KB的内存。(选项包括
--gen suppressions=all
--suppressions=suppressions file
致命:无法打开suppressions file“suppressions file”
我理解您的项目包含的代码比这多吗?请阅读手册。您可以使用
--gen suppressions=all
来生成suppressions-AFAICR,我没有将该输出直接复制到文件中,所以我将“n”粘贴。然后编辑该文件(有一个占位符,您应该在其中为每个抑制项放置一个ID/名称)。然后,您可以在后续运行中使用您创建的文件名
--suppressions=name
。您可能需要
——show leak kinds=all
,也可能需要其他一些。使用
valgrind--help
,但输出相当广泛。您已将其与
gobject
链接。在初始化类型系统的库中似乎有静态初始化。有可能我有很多抑制吗?我使用空的main.cpp构建项目。但是我有更多的资料来源,我不包括在main.cpp中。这就是valgrind产生的结果:在以前版本的MacOSX和valgrind中,我已经有超过200次的抑制——对它们进行编号是件麻烦事。我用最简单的程序达到了21岁。你对很多的定义是什么?(我还没有去追踪你的链接——我应该在做这个‘工作’的事情。)我忘了告诉你,我有lubuntu 15.10,如果重要的话,原则保持不变;细节肯定与MacOSX截然不同。也就是说,我显示的抑制在Mac上是相关的,在Ubuntu上是无关的。你在Ubuntu上展示的任何东西在Mac上都是无关紧要的。谢谢你的解释
g++ -O3 -g -std=c++11 mincpp.cpp -o mincpp
$ valgrind mincpp
==69167== Memcheck, a memory error detector
==69167== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==69167== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==69167== Command: mincpp
==69167== 
--69167-- UNKNOWN fcntl 97!
--69167-- UNKNOWN fcntl 97! (repeated 2 times)
--69167-- UNKNOWN fcntl 97! (repeated 4 times)
--69167-- UNKNOWN fcntl 97! (repeated 8 times)
--69167-- UNKNOWN fcntl 97! (repeated 16 times)
--69167-- UNKNOWN fcntl 97! (repeated 32 times)
==69167== 
==69167== HEAP SUMMARY:
==69167==     in use at exit: 22,195 bytes in 190 blocks
==69167==   total heap usage: 255 allocs, 65 frees, 27,947 bytes allocated
==69167== 
==69167== LEAK SUMMARY:
==69167==    definitely lost: 4,120 bytes in 2 blocks
==69167==    indirectly lost: 2,288 bytes in 6 blocks
==69167==      possibly lost: 4,880 bytes in 45 blocks
==69167==    still reachable: 2,344 bytes in 12 blocks
==69167==         suppressed: 8,563 bytes in 125 blocks
==69167== Rerun with --leak-check=full to see details of leaked memory
==69167== 
==69167== For counts of detected and suppressed errors, rerun with: -v
==69167== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
$
$ valgrind --gen-suppressions=all --leak-check=full --show-leak-kinds=all mincpp
==69211== Memcheck, a memory error detector
==69211== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==69211== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==69211== Command: mincpp
==69211== 
--69211-- UNKNOWN fcntl 97!
--69211-- UNKNOWN fcntl 97! (repeated 2 times)
--69211-- UNKNOWN fcntl 97! (repeated 4 times)
--69211-- UNKNOWN fcntl 97! (repeated 8 times)
--69211-- UNKNOWN fcntl 97! (repeated 16 times)
--69211-- UNKNOWN fcntl 97! (repeated 32 times)
==69211== 
==69211== HEAP SUMMARY:
==69211==     in use at exit: 22,195 bytes in 190 blocks
==69211==   total heap usage: 255 allocs, 65 frees, 27,947 bytes allocated
==69211== 
==69211== 24 bytes in 1 blocks are still reachable in loss record 5 of 62
==69211==    at 0x1000071FC: malloc_zone_malloc (vg_replace_malloc.c:304)
==69211==    by 0x1005DC1E4: _read_images (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005E19EB: object_setClass (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005DABC7: gc_init (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005DA8C1: preopt_init (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005DA5CA: map_images_nolock (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005ECC6C: batchFinalizeOnTwoThreads(_malloc_zone_t*, void (*)(auto_zone_cursor*, void (*)(void*, void*), void*), auto_zone_cursor*, unsigned long) (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x7FFF5FC047CF: dyld::notifyBatchPartial(dyld_image_states, bool, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==69211==    by 0x7FFF5FC04516: dyld::registerImageStateBatchChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==69211==    by 0x10023789D: dyld_register_image_state_change_handler (in /usr/lib/system/libdyld.dylib)
==69211==    by 0x1005D907B: _objc_init (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1001DFC93: _os_object_init (in /usr/lib/system/libdispatch.dylib)
==69211== 
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc_zone_malloc
   fun:_read_images
   fun:object_setClass
   fun:gc_init
   fun:preopt_init
   fun:map_images_nolock
   fun:_ZL25batchFinalizeOnTwoThreadsP14_malloc_zone_tPFvP16auto_zone_cursorPFvPvS3_ES3_ES2_m
   fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
   fun:_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE
   fun:dyld_register_image_state_change_handler
   fun:_objc_init
   fun:_os_object_init
}
==69211== 24 bytes in 1 blocks are still reachable in loss record 6 of 62
==69211==    at 0x1000071FC: malloc_zone_malloc (vg_replace_malloc.c:304)
==69211==    by 0x1005DC1E4: _read_images (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005E19EB: object_setClass (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005DCC96: NXHashInsert (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005DB9B8: _read_images (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005DA5DA: map_images_nolock (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1005ECC6C: batchFinalizeOnTwoThreads(_malloc_zone_t*, void (*)(auto_zone_cursor*, void (*)(void*, void*), void*), auto_zone_cursor*, unsigned long) (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x7FFF5FC047CF: dyld::notifyBatchPartial(dyld_image_states, bool, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==69211==    by 0x7FFF5FC04516: dyld::registerImageStateBatchChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==69211==    by 0x10023789D: dyld_register_image_state_change_handler (in /usr/lib/system/libdyld.dylib)
==69211==    by 0x1005D907B: _objc_init (in /usr/lib/libobjc.A.dylib)
==69211==    by 0x1001DFC93: _os_object_init (in /usr/lib/system/libdispatch.dylib)
==69211== 
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc_zone_malloc
   fun:_read_images
   fun:object_setClass
   fun:NXHashInsert
   fun:_read_images
   fun:map_images_nolock
   fun:_ZL25batchFinalizeOnTwoThreadsP14_malloc_zone_tPFvP16auto_zone_cursorPFvPvS3_ES3_ES2_m
   fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
   fun:_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE
   fun:dyld_register_image_state_change_handler
   fun:_objc_init
   fun:_os_object_init
}
…
==69211== LEAK SUMMARY:
==69211==    definitely lost: 4,120 bytes in 2 blocks
==69211==    indirectly lost: 2,288 bytes in 6 blocks
==69211==      possibly lost: 4,880 bytes in 45 blocks
==69211==    still reachable: 2,344 bytes in 12 blocks
==69211==         suppressed: 8,563 bytes in 125 blocks
==69211== 
==69211== For counts of detected and suppressed errors, rerun with: -v
==69211== ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 12 from 12)
$
$ valgrind --gen-suppressions=all --leak-check=full --show-leak-kinds=all mincpp 2>./min.suppressions
$ 
{
   Mac-OSX-10.11.4-GCC-5.3.0-C++-Suppressions-001
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc_zone_malloc
   fun:_read_images
   fun:object_setClass
   fun:gc_init
   fun:preopt_init
   fun:map_images_nolock
   fun:_ZL25batchFinalizeOnTwoThreadsP14_malloc_zone_tPFvP16auto_zone_cursorPFvPvS3_ES3_ES2_m
   fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
   fun:_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE
   fun:dyld_register_image_state_change_handler
   fun:_objc_init
   fun:_os_object_init
}
{
   Mac-OSX-10.11.4-GCC-5.3.0-C++-Suppressions-002
   Memcheck:Leak
   match-leak-kinds: reachable
   fun:malloc_zone_malloc
   fun:_read_images
   fun:object_setClass
   fun:NXHashInsert
   fun:_read_images
   fun:map_images_nolock
   fun:_ZL25batchFinalizeOnTwoThreadsP14_malloc_zone_tPFvP16auto_zone_cursorPFvPvS3_ES3_ES2_m
   fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
   fun:_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE
   fun:dyld_register_image_state_change_handler
   fun:_objc_init
   fun:_os_object_init
}
…
{
   Mac-OSX-10.11.4-GCC-5.3.0-C++-Suppressions-021
   Memcheck:Leak
   match-leak-kinds: definite
   fun:malloc_zone_memalign
   fun:_ZL11addSubclassP10objc_classS0_
   fun:_ZL12realizeClassP10objc_class
   fun:_ZL12realizeClassP10objc_class
   fun:_ZN4dyldL12notifySingleE17dyld_image_statesPK11ImageLoader
   fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
   fun:_ZN11ImageLoader19processInitializersERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
   fun:_ZN11ImageLoader19processInitializersERKNS_11LinkContextEjRNS_21InitializerTimingListERNS_15UninitedUpwardsE
   fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE
   fun:_ZN4dyld24initializeMainExecutableEv
   fun:_ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_Pm
   fun:_ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_Pm
}
$ valgrind --suppressions=./min.suppressions mincpp
==72028== Memcheck, a memory error detector
==72028== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==72028== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==72028== Command: mincpp
==72028== 
--72028-- UNKNOWN fcntl 97!
--72028-- UNKNOWN fcntl 97! (repeated 2 times)
--72028-- UNKNOWN fcntl 97! (repeated 4 times)
--72028-- UNKNOWN fcntl 97! (repeated 8 times)
--72028-- UNKNOWN fcntl 97! (repeated 16 times)
--72028-- UNKNOWN fcntl 97! (repeated 32 times)
==72028== 
==72028== HEAP SUMMARY:
==72028==     in use at exit: 22,195 bytes in 190 blocks
==72028==   total heap usage: 255 allocs, 65 frees, 27,947 bytes allocated
==72028== 
==72028== LEAK SUMMARY:
==72028==    definitely lost: 0 bytes in 0 blocks
==72028==    indirectly lost: 0 bytes in 0 blocks
==72028==      possibly lost: 0 bytes in 0 blocks
==72028==    still reachable: 0 bytes in 0 blocks
==72028==         suppressed: 22,195 bytes in 190 blocks
==72028== 
==72028== For counts of detected and suppressed errors, rerun with: -v
==72028== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
$