2010-04-23 61 views
0

我得到以下內存泄漏。它可能是由std :: string引起的。 我該如何避免它?如何避免以下內容純化C++中檢測到的內存泄漏?

PLK: 23 bytes potentially leaked at 0xeb68278 

    * Suppressed in /vobs/ubtssw_brrm/test/testcases/.purify [line 3] 

    * This memory was allocated from: 

     malloc   [/vobs/ubtssw_brrm/test/test_build/linux-x86/rtlib.o] 

     operator new(unsigned) [/vobs/MontaVista/Linux/montavista/pro/devkit/x86/586/target/usr/lib/libstdc++.so.6] 

     operator new(unsigned) [/vobs/ubtssw_brrm/test/test_build/linux-x86/rtlib.o] 

     std::string<char, std::char_traits<char>, std::allocator<char>>::_Rep::_S_create(unsigned, unsigned, std::allocator<char> const&) [/vobs/MontaVista/Linux/montavista/pro/devkit/ 

x86/586/target/usr/lib/libstdc++.so.6] 

     std::string<char, std::char_traits<char>, std::allocator<char>>::_Rep::_M_clone(std::allocator<char> const&, unsigned) [/vobs/MontaVista/Linux/montavista/pro/devkit/x86/586/tar 

get/usr/lib/libstdc++.so.6] 

     std::string<char, std::char_traits<char>, std::allocator<char>>::string<char, std::char_traits<char>, std::allocator<char>>(std::string<char, std::char_traits<char>, std::alloc 

ator<char>> const&) [/vobs/MontaVista/Linux/montavista/pro/devkit/x86/586/target/usr/lib/libstdc++.so.6] 

     uec_UEDir::getEntryToUpdateAfterInsertion(rcapi_ImsiGsmMap const&, rcapi_ImsiGsmMap&, std::_Rb_tree_iterator<std::pair<std::string<char, std::char_traits<char>, std::allocator< 

char>> const, UEDirData >>&) [/vobs/ubtssw_brrm/uectrl/linux-x86/../src/uec_UEDir.cc:2278] 

     uec_UEDir::addUpdate(rcapi_ImsiGsmMap const&, LocalUEDirInfo&, rcapi_ImsiGsmMap&, int, unsigned char) [/vobs/ubtssw_brrm/uectrl/linux-x86/../src/uec_UEDir.cc:282] 

     ucx_UEDirHandler::addUpdateUEDir(rcapi_ImsiGsmMap, UEDirUpdateType, acap_PresenceEvent) [/vobs/ubtssw_brrm/ucx/linux-x86/../src/ucx_UEDirHandler.cc:374] 
+1

在堆上分配字符串對象如下:string * ps = new string(); ? Theres標準庫泄露的可能性很小。淨化往往會產生誤報。 – 2010-04-23 07:15:29

回答

0

我曾經在那裏Valgrind的表示我有泄漏std::string的情況下,但我看不出如何。事實證明,我正在泄漏另一個按值存放字符串的對象,但Valgrind正確地還發現了泄漏的字符串內存(這是絕大多數被泄露的內存)。我懷疑uec_UEDir沒有正確管理它的字符串或正在泄漏自己。我通過非常仔細的代碼檢查最終發現了我的問題。