Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
admsasha
21 / 21 / 6
Регистрация: 11.06.2011
Сообщений: 286
#1

Double free or corruption (fasttop)

15.03.2018, 11:28. Просмотров 851. Ответов 2
Метки нет (Все метки)

Помогите разобраться в чем может быть причина. Есть одна очень большая программа. И она периодически падает. Через gdb попытался что-то понять, но в этот раз ничего не дало...


Вот вывод bt
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
*** Error in `/home/sasha/myprog': double free or corruption (fasttop): 0x00007fffd0001070 ***
 
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7ffff0b0c700 (LWP 11565)]
0x00007ffff4994067 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56      ../nptl/sysdeps/unix/sysv/linux/raise.c: Нет такого файла или каталога.
(gdb) bt
#0  0x00007ffff4994067 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007ffff4995448 in __GI_abort () at abort.c:89
#2  0x00007ffff49d21b4 in __libc_message (do_abort=do_abort@entry=1,
    fmt=fmt@entry=0x7ffff4ac7210 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3  0x00007ffff49d798e in malloc_printerr (action=1,
    str=0x7ffff4ac73f8 "double free or corruption (fasttop)", ptr=<optimized out>) at malloc.c:4996
#4  0x00007ffff49d8696 in _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3840
#5  0x0000000000511df1 in ThStatus::start_thread (this=0x85a318) at ThStatus.cpp:27
#6  0x0000000000422b33 in boost::_mfi::mf0<void, ThStatus>::operator() (this=0x85a308, t=...)
    at /usr/include/boost/bind/mem_fn_template.hpp:70
#7  0x0000000000422732 in boost::_bi::list1<boost::_bi::value<ThStatus> >::operator()<boost::_mfi::mf0<void, ThStatus>, boost::_bi::list0> (this=0x85a318, f=..., a=...) at /usr/include/boost/bind/bind.hpp:253
#8  0x000000000042218d in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ThStatus>, boost::_bi::list1<boost::_bi::value<ThStatus> > >::operator() (this=0x85a308)
    at /usr/include/boost/bind/bind_template.hpp:20
#9  0x0000000000421cc0 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ThStatus>, boost::_bi::list1<boost::_bi::value<ThStatus> > > >::run (this=0x85a150)
    at /usr/include/boost/thread/detail/thread.hpp:117
#10 0x00007ffff71b4aea in ?? () from /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.55.0
#11 0x00007ffff5b7d064 in start_thread (arg=0x7ffff0b0c700) at pthread_create.c:309
#12 0x00007ffff4a4762d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
в ThStatus.cpp:27 идет строка
C
1
2
            26 for (std::string server:groups){
            27 std::string result = ThFactory::command(server,"list");
Внутрь в ThFactory::command судя по bt не входит. А где тогда искать двойное удаление ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2018, 11:28
Ответы с готовыми решениями:

Double free or corruption
Здравствуйте, вылетает такая ошибка Версия DEBUG, но всё-равно почему-то...

Работа с dlsym. Invalid conversion from 'void *' to 'double(*)(double)'
Реализован пример с одного сайта: int main(int argc, char* argv){ void...

Ошибка: double free or corruption (fasttop)
Я описываю метод diamond-square. Это метод для процедурной генерации мира (кому...

Ошибка этапа исполнения: double free or corruption (fasttop):
Доброе времени суток подскажите пожалуйста в чем может быть следующая проблема....

Double free or corruption при изменении размера динамического массива
Сразу скажу, что у меня задание на работу с памятью, и std::vector по условию...

2
TRam_
зомбяк
697 / 657 / 208
Регистрация: 14.05.2017
Сообщений: 2,237
15.03.2018, 13:09 #2
Что-то не то происходит либо в ThStatus::start_thread, либо в функции, которая этот поток создаёт.
0
admsasha
21 / 21 / 6
Регистрация: 11.06.2011
Сообщений: 286
16.03.2018, 11:09  [ТС] #3
Лучший ответ Сообщение было отмечено admsasha как решение

Решение

Поток создается в main()
C++
1
2
3
        ThStatus  threadStatus;
        thrds.create_thread(boost::bind(&ThStatus::start_thread,threadStatus));
        thrds.join_all();
поменял строку
C++
1
            std::string result = ThFactory::command(server,"list");
на
C++
1
2
3
4
5
            
27 std::cout <<< "1111" << std::endl;
28 std::string result = "";
29 result = ThFactory::command(server,"list");
30 std::cout <<< "2222" << std::endl;
Отладчик стал показывать проблему на строке 28
А в консоле
Код
1111
2222
Я ожидал будет падение после 1111.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2018, 11:09

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt;...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double...

Ругается на строчку double[] wArray = new double[n];, double[] w = new double[n];
Ругается на строчку double wArray = new double;, double w = new double; Не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru