簡體   English   中英

Valgrind在使用API​​時報告內存泄漏

[英]Valgrind reporting memory leaks when using API

我正在使用Dyninst API構建應用程序,並且使用簡單的Hello World應用程序會產生很多內存泄漏。 Dyninst正在部分地管理自己的內存,我很好奇Valgrind是否會將內存報告為“泄漏”。

我正在使用C ++,但還不是100%滿意,所以,如果我忘記提供任何有幫助的信息,請這么說。

謝謝!

http://www.dyninst.org/


這是Hello World應用程序:

#include "BPatch.h"
int main(int argc, char** argv) {
  BPatch bpatch;
}

Valgrind輸出:

==10307== Memcheck, a memory error detector.
==10307== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.
==10307== Using LibVEX rev 1884, a library for dynamic binary translation.
==10307== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==10307== Using valgrind-3.4.1-Debian, a dynamic binary instrumentation framework.
==10307== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==10307== For more details, rerun with: -v
==10307== 
==10307== 
==10307== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 31 from 1)
==10307== malloc/free: in use at exit: 16,021 bytes in 422 blocks.
==10307== malloc/free: 2,198 allocs, 1,776 frees, 74,304 bytes allocated.
==10307== For counts of detected errors, rerun with: -v
==10307== searching for pointers to 422 not-freed blocks.
==10307== checked 8,642,848 bytes.
==10307== 
==10307== 44 (12 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 51 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x46505EF: Dyninst::SymtabAPI::typeCollection::getAllTypes() (Collections.C:515)
==10307==    by 0x46223F6: Dyninst::SymtabAPI::Symtab::getAllstdTypes() (Symtab.C:2182)
==10307==    by 0x435E510: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 20 bytes in 1 blocks are definitely lost in loss record 52 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x438C3C4: BPatch_type::BPatch_type(Dyninst::SymtabAPI::Type*) (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x435E54F: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 266 (72 direct, 194 indirect) bytes in 2 blocks are definitely lost in loss record 69 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x438B6D7: BPatch_type::BPatch_type(char const*, int, BPatch_dataClass) (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x438BCAA: BPatch_type::createFake(char const*) (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x435E4DB: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 1,412 bytes in 60 blocks are possibly lost in loss record 82 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x4817AD3: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.10)
==10307==    by 0x4818734: (within /usr/lib/libstdc++.so.6.0.10)
==10307==    by 0x48188A5: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.10)
==10307==    by 0x4665707: global constructors keyed to annotations.C (annotations.C:38)
==10307==    by 0x4666E3C: (within ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libsymtabAPI.so)
==10307==    by 0x45A85AF: (within ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libsymtabAPI.so)
==10307==    by 0x400E343: (within /lib/ld-2.9.so)
==10307==    by 0x400E473: (within /lib/ld-2.9.so)
==10307==    by 0x400084E: (within /lib/ld-2.9.so)
==10307== 
==10307== 
==10307== 3,657 (72 direct, 3,585 indirect) bytes in 1 blocks are definitely lost in loss record 84 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x435E583: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 268 (12 direct, 256 indirect) bytes in 1 blocks are definitely lost in loss record 85 of 95
==10307==    at 0x40269EE: operator new(unsigned int) (vg_replace_malloc.c:224)
==10307==    by 0x465072F: Dyninst::SymtabAPI::builtInTypeCollection::getAllBuiltInTypes() (Collections.C:673)
==10307==    by 0x46223C6: Dyninst::SymtabAPI::Symtab::getAllbuiltInTypes() (Symtab.C:2188)
==10307==    by 0x435E598: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== 
==10307== 144 bytes in 1 blocks are possibly lost in loss record 91 of 95
==10307==    at 0x4025092: calloc (vg_replace_malloc.c:397)
==10307==    by 0x401128B: _dl_allocate_tls (in /lib/ld-2.9.so)
==10307==    by 0x4A0F672: pthread_create@@GLIBC_2.1 (in /lib/tls/i686/cmov/libpthread-2.9.so)
==10307==    by 0x441B852: InternalThread::createThread() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x44543B5: BPatch_asyncEventHandler::initialize() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x435E62A: BPatch::BPatch() (in ~/Desktop/Masters/dyninstAPI/src/i386-unknown-linux2.4/lib/libdyninstAPI.so)
==10307==    by 0x804914B: main (mutator.c:14)
==10307== 
==10307== LEAK SUMMARY:
==10307==    definitely lost: 188 bytes in 6 blocks.
==10307==    indirectly lost: 4,067 bytes in 46 blocks.
==10307==      possibly lost: 1,556 bytes in 61 blocks.
==10307==    still reachable: 10,210 bytes in 309 blocks.
==10307==         suppressed: 0 bytes in 0 blocks.
==10307== Reachable blocks (those to which a pointer was found) are not shown.
==10307== To see them, rerun with: --leak-check=full --show-reachable=yes

Valgrind對您的代碼和庫是視而不見的。 它可能會報告庫中的泄漏。

你可以看到通過運行泄露,所建議的,與--leak-check=full

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM