Boost logo

Boost Users :

Subject: Re: [Boost-users] one memory leak
From: Brian Budge (brian.budge_at_[hidden])
Date: 2013-12-06 11:34:05


On Thu, Dec 5, 2013 at 9:48 PM, XIN LI <lixinusa2013_at_[hidden]> wrote:
> Hi there,
> I use boost version 1.49.0. I meet a memory leak for below sentences:
> boost::filesystem::path tmp = input.stem();
> string strDir = tmp.normalize().string();
>
> Valgrind report memory leak as below:
>
> ==18299== 56 bytes in 1 blocks are still reachable in loss record 26 of 61
> ==18299== at 0x16DF68B8: malloc (vg_replace_malloc.c:270)
> ==18299== by 0x3F64FEC: operator new(unsigned long) (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x3F5B8F1: stlp_std::priv::__acquire_category(char const*&,
> char*, _Locale_name_hint*, char const* (*)(char const*, char*,
> _Locale_name_hint*, int*), void* (*)(char const*, _Locale_name_hint*, int*),
> char const* (*)(char*), stlp_std::hash_map<stlp_std::basic_string<char,
> stlp_std::char_traits<char>, stlp_std::allocator<char> >,
> stlp_std::pair<void*, unsigned long>,
> stlp_std::hash<stlp_std::basic_string<char, stlp_std::char_traits<char>,
> stlp_std::allocator<char> > >,
> stlp_std::equal_to<stlp_std::basic_string<char, stlp_std::char_traits<char>,
> stlp_std::allocator<char> > >,
> stlp_std::allocator<stlp_std::pair<stlp_std::basic_string<char,
> stlp_std::char_traits<char>, stlp_std::allocator<char> > const,
> stlp_std::pair<void*, unsigned long> > > >**, int*) (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x3F5BD04: stlp_std::priv::__acquire_ctype(char const*&,
> char*, _Locale_name_hint*, int*) (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x3F3F502: stlp_std::_Locale_impl::insert_ctype_facets(char
> const*&, char*, _Locale_name_hint*) (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x3F3DC3C: stlp_std::locale::locale(char const*) (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x458FFFE: boost::filesystem3::path::wchar_t_codecvt_facet()
> (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x4591806: boost::filesystem3::path::begin() const (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x4592844: boost::filesystem3::path::m_normalize() (in
> /home/lixin/work/prj/hotfix/13q2_ehf1/src/prosim/dist/Debug_64/GNU-Linux-x86/nanospice)
> ==18299== by 0x21019EB: boost::filesystem3::path::normalize()
> (path.hpp:430)
>
> Because my program need run thousands of time and very sensitive for the
> memory leak. Could anyone help to suggest one way to avoid such memory leak?
> Thanks a lot!
>

Are you sure that this occurs every time? In my experience, some of
the std::locale things are initialized once upon first use, and this
"leak" will be a one-time issue. Please verify that if you make
another path that you will get duplicate leakage.

  Brian


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net