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