lundi 13 janvier 2020

std::bad_alloc while trying to push_back to stl vector

So, I am creating a library out of some source codes which I have written. When I just create an executable everything works as expected, but when I create a shared library and try to run it, the program crashes throwing std::bad_alloc error. I performed a bt and was able to find the particular line where this is happening. But, I am not sure why it is happening or how to fix it.

BT output -

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Thread 1 "test" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51  ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x0000007fb7d6a4d8 in __GI_raise (sig=sig@entry=6)
    at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x0000007fb7d6b8b4 in __GI_abort () at abort.c:79
#2  0x0000007fb71a80c4 in __gnu_cxx::__verbose_terminate_handler() ()
    at /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#3  0x0000007fb71a5c34 in  () at /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#4  0x0000007fb71a5c80 in  () at /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#5  0x0000007fb71a5f38 in __cxa_rethrow ()
    at /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#6  0x0000007fb71a6530 in operator new(unsigned long, std::nothrow_t const&) ()
    at /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#7  0x0000007fb7f26224 in __gnu_cxx::new_allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::allocate(unsigned long, void const*) (this=0x7fb7f90c48 <app_config+64>, __n=576460752303423487)
    at /usr/include/c++/7/ext/new_allocator.h:111
#8  0x0000007fb7f25094 in std::allocator_traits<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::allocate(std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, unsigned long) (__a=..., __n=576460752303423487)
    at /usr/include/c++/7/bits/alloc_traits.h:436
#9  0x0000007fb7f239f0 in std::_Vector_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_allocate(uns---Type <return> to continue, or q <return> to quit---
igned long) (this=0x7fb7f90c48 <app_config+64>, __n=576460752303423487)
    at /usr/include/c++/7/bits/stl_vector.h:172
#10 0x0000007fb7f21efc in std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_realloc_insert<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x7fb7f90c48 <app_config+64>, __position=non-dereferenceable iterator for std::vector, __args#0="c4cde6c9-2766-4491-b0cc-99347ae56af3")
    at /usr/include/c++/7/bits/vector.tcc:406
#11 0x0000007fb7f20aa8 in std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::push_back(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x7fb7f90c48 <app_config+64>, __x="c4cde6c9-2766-4491-b0cc-99347ae56af3")
    at /usr/include/c++/7/bits/stl_vector.h:948
#12 0x0000007f8290a31c in dsexample_parse_config_file() ()
    at gstdsexample.cpp:289
#13 0x0000007f8290b670 in gst_dsexample_start(GstBaseTransform*) (btrans=0x55559---Type <return> to continue, or q <return> to quit---
7b4d0) at gstdsexample.cpp:619
#14 0x0000007fadb52224 in  () at /usr/lib/aarch64-linux-gnu/libgstbase-1.0.so.0
#15 0x000000555597b4d0 in  ()

The exact line of code -


                        app_config.cameras_info.push_back(cam_info);
                        app_config.enabled_camids.push_back(id);

Here, cameras_info and enabled_camids are vector of structure and vector of strings respectively.

I am pretty sure I am not running out of memory. Also, the binary version of the program runs just fine.

Aucun commentaire:

Enregistrer un commentaire