Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Possible memory leak #1

Closed
atomicflag opened this issue Nov 15, 2017 · 1 comment
Closed

Possible memory leak #1

atomicflag opened this issue Nov 15, 2017 · 1 comment

Comments

@atomicflag
Copy link

data(): param{} {}

It seems that here param is initialized but sometimes not destroyed. ASAN Log (see #5):

    #0 0x3b85d2 in operator new(unsigned long) /opt/llvm/src/projects/compiler-rt/lib/asan/asan_new_delete.cc:92:3
    #1 0x534142 in std::__1::__allocate(unsigned long) /opt/llvm/stage/bin/../include/c++/v1/new:226:10
    #2 0x534142 in std::__1::allocator<std::__1::__function::__func<clipp::parameter::predicate_adapter, std::__1::allocator<clipp::parameter::predicate_adapter>, clipp::subrange (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)> >::allocate(unsigned long, void const*) /opt/llvm/stage/bin/../include/c++/v1/memory:1747
    #3 0x534142 in std::__1::function<clipp::subrange (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>::function<clipp::parameter::predicate_adapter, void>(clipp::parameter::predicate_adapter) /opt/llvm/stage/bin/../include/c++/v1/functional:1774
    #4 0x5301d2 in clipp::parameter::parameter() .../clipp.h:1820:9
    #5 0x52f81b in clipp::group::child_t<clipp::parameter, clipp::group>::data::data() .../clipp.h:2590:21
    #6 0x552079 in clipp::group::child_t<clipp::parameter, clipp::group>::child_t(clipp::group::child_t<clipp::parameter, clipp::group> const&) .../clipp.h:2437:38
    #7 0x551da8 in void std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> >::construct<clipp::group::child_t<clipp::parameter, clipp::group>, clipp::group::child_t<clipp::parameter, clipp::group>&>(clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>&&&) /opt/llvm/stage/bin/../include/c++/v1/memory:1759:31
    #8 0x551da8 in void std::__1::allocator_traits<std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> > >::__construct<clipp::group::child_t<clipp::parameter, clipp::group>, clipp::group::child_t<clipp::parameter, clipp::group>&>(std::__1::integral_constant<bool, true>, std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> >&, clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>&&&) /opt/llvm/stage/bin/../include/c++/v1/memory:1670
    #9 0x551da8 in void std::__1::allocator_traits<std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> > >::construct<clipp::group::child_t<clipp::parameter, clipp::group>, clipp::group::child_t<clipp::parameter, clipp::group>&>(std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> >&, clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>&&&) /opt/llvm/stage/bin/../include/c++/v1/memory:1516
    #10 0x551da8 in void std::__1::allocator_traits<std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> > >::__construct_range_forward<clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>*>(std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> >&, clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>*&) /opt/llvm/stage/bin/../include/c++/v1/memory:1600
    #11 0x551da8 in std::__1::enable_if<__is_forward_iterator<clipp::group::child_t<clipp::parameter, clipp::group>*>::value, void>::type std::__1::vector<clipp::group::child_t<clipp::parameter, clipp::group>, std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> > >::__construct_at_end<clipp::group::child_t<clipp::parameter, clipp::group>*>(clipp::group::child_t<clipp::parameter, clipp::group>*, clipp::group::child_t<clipp::parameter, clipp::group>*, unsigned long) /opt/llvm/stage/bin/../include/c++/v1/vector:1030
    #12 0x54fea8 in std::__1::vector<clipp::group::child_t<clipp::parameter, clipp::group>, std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> > >::vector(std::__1::vector<clipp::group::child_t<clipp::parameter, clipp::group>, std::__1::allocator<clipp::group::child_t<clipp::parameter, clipp::group> > > const&) /opt/llvm/stage/bin/../include/c++/v1/vector:1213:9
    #13 0x520006 in clipp::group::group(clipp::group const&) .../clipp.h:2936:5
    #14 0x3c4b5c in clipp::operator,(clipp::parameter, clipp::parameter) .../clipp.h:3333:12
    #15 0x3c34a1 in main .../main.cpp:22:86
    #16 0x7fde62ff2f39 in __libc_start_main (/lib64/libc.so.6+0x20f39)

SUMMARY: AddressSanitizer: 128 byte(s) leaked in 2 allocation(s).

data probably shouldn't initialize param at all since the enclosing child_t doesn't have a default ctor anyway. This gets rid of the leak.

data() {} 
@muellan
Copy link
Owner

muellan commented Nov 15, 2017

Thanks! I fixed it.

@muellan muellan closed this as completed Nov 15, 2017
GerHobbelt referenced this issue in GerHobbelt/clipp Aug 15, 2021
Change check_is_callable to use std::invoke_result (when available)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants