0

valgrind を使用してプログラムを実行していますが、ツール自体が原因でエラーが発生しているように見えますか? 私のエラーはすべて次のように見えますが、他の投稿を読むと、通常、at問題のある malloc がプログラム内のどこで発生したかが行によって示されているようですが、私のat行はすべて valgrind から来ています。これらは私のプログラムの正当なエラーですか?

==10551== 32,808 (24 direct, 32,784 indirect) bytes in 1 blocks are definitely lost in loss     record 840 of 843
==10551==    at 0x54D7: malloc_zone_malloc (in     /usr/local/Cellar/valgrind/3.8.1/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==10551==    by 0x7C5171: NXCreateMapTableFromZone (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7C4722: _read_images (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7C39EB: map_images_nolock (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7C34F3: map_images (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7FFF5FC04936: dyld::notifyBatchPartial(dyld_image_states, bool, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==10551==    by 0x7FFF5FC0467C: dyld::registerImageStateBatchChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==10551==    by 0xA99ED9: dyld_register_image_state_change_handler (in /usr/lib/system/libdyld.dylib)
==10551==    by 0x7C204C: _objc_init (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x6BB27: libSystem_initializer (in /usr/lib/libSystem.B.dylib)
==10551==    by 0x7FFF5FC13377: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==10551==    by 0x7FFF5FC13761: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==10551== 

自作を使用してvalgrindをインストールしました。おそらく、このエラーと関係があります。

==10551== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==10551== WARNING: Expect incorrect results, assertions and crashes.

しかし、これらのエラーが私のプログラムから来ていないことを(以前にこれを使用したことがある人によって)確認したいだけです。(私は10.8を使用しています)。

4

2 に答える 2

0

Valgrind は、メモリの割り当てと解放を行うライブラリ関数 (malloc()、calloc()、realloc()、free() が最も重要) のデフォルトの実装を、それらへの呼び出しを追跡し、簿記を行うために独自のものに置き換えます。バックトレースは、free() されたことのないメモリを割り当てた malloc() 呼び出しへのコール スタックを示しています。したがって、問題は malloc() 自体にあるのではなく、対応する free() なしで malloc() を呼び出すコードにあります。

于 2013-10-22T20:09:21.047 に答える