Russian Qt Forum
Ноябрь 26, 2024, 01:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4 5 6   Вниз
  Печать  
Автор Тема: Странная ошибка SIG SEGV  (Прочитано 35597 раз)
vbi
Гость
« Ответ #30 : Март 23, 2012, 16:00 »

программа создает поток отправляет запрос. Если созданных потоков меньше 32, то создает опять и т. д. потоки возвращают ответ и не удаляются а запихаются в стек. Потом программа смотрит - есть в стеке потоков и меньше 32 еще не вернули ответ - берет из стека поток и снова отправляет запрос и т. д.
Записан
Bepec
Гость
« Ответ #31 : Март 23, 2012, 18:08 »

Первое впечатление если чесно отвратное. Надо же других так неуважать, чтобы такую подлость с самого начала творить Улыбающийся (это не обвинение, это не оскорбление, ежели обидел - извиняюсь)

Я узнал, что программа там валится просто - ОНА ВАЛИТСЯ С ПЕРВОГО ЖЕ ЗАПУСКА Улыбающийся
32!!! окна критичных ошибок и полтора десятка предупреждений о том, что мутекс нужно сначала залочить, а потом разлочить.

Соответственно тут и появилась диллема:
Если не комментить - валится с самого начала.

Если комментить - не посылает более 32.

PS я понял логику вашей программы, не понял реализацию, переделывать вашу программу лень (тем более со стеком).

PPS счас скачаю возможно ваш новый проект и попытаюсь запустить...

Записан
vbi
Гость
« Ответ #32 : Март 23, 2012, 18:15 »

Спасибо за критику!

"окна критичных ошибок и полтора десятка предупреждений о том, что мутекс нужно сначала залочить, а потом разлочить" - Почему у меня окна и предупреждения не валятся вообще, даже варнингов нет? Чем вы пользуетесь? У меня стандартный QT Creator из стандартного набора QTSDK.
Записан
vbi
Гость
« Ответ #33 : Март 23, 2012, 18:16 »

Скачайте проект еще раз пожалуйста. Там та строчка закоментирована, и сделано чтоб мутекс потом разлочивался, и счетчик проходит за 32
Записан
Bepec
Гость
« Ответ #34 : Март 23, 2012, 19:32 »

Я бы задумался, если б у меня только было. А так и у Виктора она тож валилась Подмигивающий Я использую VS2008 + Qt Addin.

Скачиваю
Записан
Bepec
Гость
« Ответ #35 : Март 23, 2012, 20:55 »

Скачал запустил. Пожалел что нет второго компа - твоя прога мой i3 жрёт как мартышка семечки.
Завтра протестю. А то даже музыка заглючивает Улыбающийся
Записан
vbi
Гость
« Ответ #36 : Март 24, 2012, 11:07 »

Я собираю на MinGW. Под линуксом собирал. У меня не выдавало ошибок и варнингов на счет анлука мютекса. Да прога жрет все свободные ресурсы. Я для потоков пытаюсь и приритет ставить низкий (QThread::LowPriority) перед запуском. Вроде не должно все остальное глючить.
У меня, например, когда фильм смотрю, вроде нормально (HP Compaq 6720s 1,6 Core2Duo, 3 Gb RAM).

Цитировать
Скачал запустил. Пожалел что нет второго компа - твоя прога мой i3 жрёт как мартышка семечки.
Завтра протестю. А то даже музыка заглючивает Улыбающийся

Буду прееееемного благодарен!!!!!  Улыбающийся Улыбающийся Улыбающийся Надежда только на Вас...
Записан
Bepec
Гость
« Ответ #37 : Март 25, 2012, 11:29 »

В принципе тебя можно радовать - ты в своей программе портишь память Улыбающийся Где - незнаю, это ты сам должен найти Улыбающийся

Проблема вылета - при парсинге URL "http://' отбрасывается "http:" и идёт поиск "//"

Вот только в момент вызова ф-ции QString.indexOf() у строки из 2 (двух) слешей из-за испорченной памяти длина где то "-1655874695" рандомно Улыбающийся Собственно там и выпадает программа в осадок.

Мой тебе совет - перепиши программу. (поиск порчи памяти это оочень сложное дело)

И да - советую (но не настаиваю), использовать наследование от QThread и создать 1 класс который будет отвечать за нужные тебе действия Подмигивающий И уж точно он не будет жрать 90% процессорного времени моего компа Веселый

update: ради достоверности ещё пару раз дождался вылетов - ты портишь память. В самых разных местах. И конечно же иногда это проскакивает, иногда рушит программу.

Порча памяти - это запись данных в некорректный участок памяти. К примеру в 26 элемент массива с 10 элементами.
« Последнее редактирование: Март 25, 2012, 11:56 от Bepec » Записан
vbi
Гость
« Ответ #38 : Март 25, 2012, 13:34 »

Спасибо! Попробую разобратся. Вы очень помогли!
Записан
vbi
Гость
« Ответ #39 : Март 29, 2012, 11:54 »

Мне переписывать программу сложно. Я итак ее пол года переписывал уже. А теперь опять переписывать. Там столько всего...

А как вы длинну измеряли? sizeOf()?
Записан
mutineer
Гость
« Ответ #40 : Март 29, 2012, 12:03 »

int QString::length () const
Записан
Bepec
Гость
« Ответ #41 : Март 29, 2012, 12:12 »

У вас там портится память. То есть любое поле может измениться на любое значение.

Наиболее часто у меня вылетало именно при размере строки, но были и ошибки обращения по указателю (оказывался сдвинут в неипические дали).

Порчу памяти невозможно предотвратить заплаткой, ибо она может испортить и заплатку Подмигивающий  Её нужно вычислить и убрать.

Да, длину я не вычислял - просто прошёл по стеку вызовов перед вылетом, смотрел данные внутри QString класса.
Записан
V1KT0P
Гость
« Ответ #42 : Март 29, 2012, 13:59 »

Мне переписывать программу сложно. Я итак ее пол года переписывал уже. А теперь опять переписывать. Там столько всего...

А как вы длинну измеряли? sizeOf()?

Как я тебя понима. Сам вот переписал программу и все круто, но при переписывании использовал только один поток. В релизе решил поставить 4 потока, так она зараза падает, хотя я везде синхронизируюсь через boost::asio::strand =).

добавлено:
Кстати а никто не в курсе, может valgrind может помочь выявить то место где происходит порча памяти? Valgrind же по сути виртуальная машина, тоесть может по ходу работы отслеживать кто и куда пишет а когда упадет просто посмотреть кто последний писал в затертую память.
« Последнее редактирование: Март 29, 2012, 14:20 от V1KT0P » Записан
Bepec
Гость
« Ответ #43 : Март 29, 2012, 14:24 »

Синхронизация тут не поможет.

Насчёт валгринда незнаю, но вроде в некоторых IDE есть возможность ставить условие на обращение к участку памяти.

PS хотя поиск порчи памяти дело неблагодаааарное.
Записан
vbi
Гость
« Ответ #44 : Март 29, 2012, 17:33 »

Я собирал программу под линуксом, тестировал валгриндом, но таких проблем там не было, программа не вылетала ниразу. Правда с валгриндом программа наааааамного медленне работает. Может завтра попробую поставлю на целый день, и посмотрим. А так все утечки, которые показывал валгринд я устранил)
Записан
Страниц: 1 2 [3] 4 5 6   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 20.