В программе стали происходит какие-то рандомные(там где в принципе упасть не может) падения. Вот один из крэшай меня интересует
#0 0x00007ffff54d4fcf in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ffff54d63fa in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007ffff55189c8 in __malloc_assert () from /lib/x86_64-linux-gnu/libc.so.6
#3 0x00007ffff551b6f9 in _int_malloc () from /lib/x86_64-linux-gnu/libc.so.6
#4 0x00007ffff551cf34 in malloc () from /lib/x86_64-linux-gnu/libc.so.6
#5 0x00007ffff5dec0c8 in operator new(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x0000000002faebd5 in __gnu_cxx::new_allocator<std::_List_node<unsigned int> >::allocate (this=0x5db527f0, __n=1) at /usr/include/c++/5/ext/new_allocator.h:104
#7 0x0000000002faeab0 in std::__cxx11::_List_base<unsigned int, std::allocator<unsigned int> >::_M_get_node (this=0x5db527f0) at /usr/include/c++/5/bits/stl_list.h:392
#8 0x000000000306d147 in std::__cxx11::list<unsigned int, std::allocator<unsigned int> >::_M_create_node<unsigned int const&> (this=0x5db527f0) at /usr/include/c++/5/bits/stl_list.h:571
#9 0x000000000306d02c in std::__cxx11::list<unsigned int, std::allocator<unsigned int> >::_M_insert<unsigned int const&> (this=0x5db527f0, __position=0) at /usr/include/c++/5/bits/stl_list.h:1763
#10 0x00000000033d4d9d in std::__cxx11::list<unsigned int, std::allocator<unsigned int> >::emplace_back<unsigned int const&> (this=0x5db527f0) at /usr/include/c++/5/bits/stl_list.h:1099
#11 0x00000000033d4bff in std::__cxx11::list<unsigned int, std::allocator<unsigned int> >::_M_initialize_dispatch<std::_List_const_iterator<unsigned int> > (this=0x5db527f0, __first=425, __last=3) at /usr/include/c++/5/bits/stl_list.h:1692
#12 0x0000000003651ce9 in std::__cxx11::list<unsigned int, std::allocator<unsigned int> >::list (this=0x5db527f0, __x=std::__cxx11::list = {...}) at /usr/include/c++/5/bits/stl_list.h:657
#13 0x00000000043c424f in std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >::pair (this=0x5db527e8) at /usr/include/c++/5/bits/stl_pair.h:127
#14 0x00000000043c429e in __gnu_cxx::new_allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >::construct<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > const&> (this=0x7fffffffcc2f, __p=0x5db527e8) at /usr/include/c++/5/ext/new_allocator.h:120
#15 0x00000000043c404d in std::allocator_traits<std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > > >::construct<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > const&> (__a=..., __p=0x5db527e8) at /usr/include/c++/5/bits/alloc_traits.h:530
#16 0x00000000043c3836 in std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, false> > >::_M_allocate_node<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > const&> (this=0x7fffffffcda0) at /usr/include/c++/5/bits/hashtable_policy.h:1955
#17 0x00000000043c2e09 in std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_Hashtable(std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> > const&)::{lambda(std::__detail::_Hash_node<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, false> const*)#1}::operator()(std::__detail::_Hash_node<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, false> const*) const () at /usr/include/c++/5/bits/hashtable.h:1116
#18 0x00000000043c39b6 in std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_assign<std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_assign(std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> > const&)::{lambda(std::__detail::_Hash_node<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, false> const*)#1}>(std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> > const&, std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_assign(std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> > const&)::{lambda(std::__detail::_Hash_node<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, false> const*)#1} const&) (this=0x7fffffffcda0, __ht=..., __node_gen=...) at /usr/include/c++/5/bits/hashtable.h:974
#19 0x00000000043c2ef0 in std::_Hashtable<unsigned int, std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > >, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > >, std::__detail::_Select1st, std::equal_to<unsigned int>, std::hash<unsigned int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_Hashtable (this=0x7fffffffcda0, __ht=...) at /usr/include/c++/5/bits/hashtable.h:1114
#20 0x00000000043c2b91 in std::unordered_map<unsigned int, std::__cxx11::list<unsigned int, std::allocator<unsigned int> >, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::__cxx11::list<unsigned int, std::allocator<unsigned int> > > > >::unordered_map (this=0x7fffffffcda0) at /usr/include/c++/5/bits/unordered_map.h:172
Тут происходит копирование std::unordered_map
Вот он:
typedef std::unordered_map<uint32, std::list<uint32> > ContainerInfo;
Как видно у нас тут нету никак указателей, лишь обычный примитивы и список.
Срабатывает это __malloc_assert
Что это может значить? Проблема в памяти т.к. не может выделится?
Компилятор:
gcc-5 (Debian 5.4.1-11) 5.4.1 20170519
Флаги сборки:
-ggdb3 -O0 -m64 -march=native -pipe
ОС:
Debian 8
Где-то выше/раньше по коду в вашей программе была нарушена целостность внутренних структур heap. Об этом и говорит вам malloc_assert
. Падение происходит на первой попытке выделения памяти, которая натыкается на это разрушение. Это происходит дальше/позже по коду, обычно в совершенно не относящемся к проблеме месте.
"Дедовским" методом отлова источника данной проблемы является следующий:
malloc
. unordered_map
вставить фиктивный вызов malloc(...)
с точно таким же размером в качестве аргумента. malloc
вверх по коду, пока не обнаружится точное место, которое разрушает heap.Применение этого способа - не всегда тривиальная задача. Надо обеспечить, чтобы фиктивный вызов malloc
происходил только перед именно "падающим" обращением к unordered_map
, т.е. на том же вызове функции, на той же итерации цикла и т.п. Но всего этого, при желании, можно достичь.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Дан следующий прототип функции, которая должна возвращать вектор всех делителей числа x в отсортированном порядке за O(n^1/2):
Давно учил С++, уже его подзабыл, но сейчас необходимо решить заданиеБуду благодарен любой помощи!