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

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

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Странная ошибка SIG SEGV  (Прочитано 35631 раз)
RealDuke
Гость
« Ответ #60 : Апрель 10, 2012, 10:49 »

какая версия Qt, какая ось?
4.8.0 Windows 7
Если ещё актуально, прочитай мою тему http://www.prog.org.ru/index.php?topic=21566.msg149874;topicseen#new
Вдруг поможет, подсунь библиотеки от 4.7.4.
Записан
Bepec
Гость
« Ответ #61 : Апрель 10, 2012, 10:50 »

Ппц человек Подмигивающий проблему уже решили, а он пишет и пишет Подмигивающий
Записан
vbi
Гость
« Ответ #62 : Апрель 10, 2012, 14:58 »

Если честно, так и не решили. Так и не нашел где у меня память портится.
Цитировать
Проблема вылета - при парсинге URL "http://' отбрасывается "http:" и идёт поиск "//"

Вот только в момент вызова ф-ции QString.indexOf() у строки из 2 (двух) слешей из-за испорченной памяти длина где то "-1655874695" рандомно Улыбающийся Собственно там и выпадает программа в осадок.
Отлаживал, смотрел, так и не наткнулся ни на строку с двумя слешами. Проверял длинну .length() - всюду длинна была нормальной.
Записан
Bepec
Гость
« Ответ #63 : Апрель 10, 2012, 15:34 »

Вы хоть читаете, уважаемый vbi???

Где портится память зависит от системы/количества памяти/запущенных программ/использованной памяти и т.п.

На другом компьютере портиться будет, к примеру, размер какого-нибудь массива. На третьем будет портиться левая программа, и она будет умирать. На четвёртом система уйдёт в синий экран. На пятом в заголовке вашей программы изменится третья по счёту буква. На шестом испортится указатель this и прога упадёт ещё до запуска и т.п.

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

PS на моём компе и с моей конфигурацией чаще всего портится размер строки. И это ещё не значит, что если вставить туда проверку и продолжить программу дальше, память не будет представлять фарш из предсмертных воплей байтов.
« Последнее редактирование: Апрель 10, 2012, 15:36 от Bepec » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #64 : Апрель 10, 2012, 16:01 »

На третьем будет портиться левая программа, и она будет умирать.

Кто, левая программа?
Записан
V1KT0P
Гость
« Ответ #65 : Апрель 10, 2012, 18:54 »

На третьем будет портиться левая программа, и она будет умирать.
FAIL. У каждой программы свое виртуальное пространство и чужое пространство вот так испортить нельзя.
Записан
Bepec
Гость
« Ответ #66 : Апрель 10, 2012, 20:08 »

Виктор ты в это 100% уверен?

Я лично ронял своей программой ворд/ексцель и иже с ними 2007.
Windows 7 уходит в синий экран частенько.

Нет, я знаю как раздаётся память Подмигивающий
Записан
V1KT0P
Гость
« Ответ #67 : Апрель 10, 2012, 20:38 »

Виктор ты в это 100% уверен?

Я лично ронял своей программой ворд/ексцель и иже с ними 2007.
Windows 7 уходит в синий экран частенько.

Нет, я знаю как раздаётся память Подмигивающий
Тогда набросай примерчик который валит что-то кроме себя.
Записан
Bepec
Гость
« Ответ #68 : Апрель 10, 2012, 20:55 »

Сорри Подмигивающий

Примерчик дать не могу, ибо у меня проект рабочий, коммерческий. Комплекс из примерно 20 модулей Подмигивающий
Записан
V1KT0P
Гость
« Ответ #69 : Апрель 10, 2012, 21:03 »

Сорри Подмигивающий

Примерчик дать не могу, ибо у меня проект рабочий, коммерческий. Комплекс из примерно 20 модулей Подмигивающий
Тогда расскажи как это должно получиться теоретически?
У каждого процесса виртуальное пространство. Оно разбито на страницы, те страницы что выделены указывают на какое-то пространство оперативной памяти, не что не выделены указывают куда-то в ноль или типа того. И если попытаться писать в невыделанные страницы то ОС скорее всего грохнет такое наглое приложение. Вот и получается что программа может писать только туда куда разрешили. Вот и спрашивается как она может записать в чужой процесс?
Ведь не зря же добавляли shared memory, ибо просто так обратиться к памяти чужого процесса не получится. Тут даже топик был о том что нельзя по указателю прочитать данные из чужого процесса.
Записан
Bepec
Гость
« Ответ #70 : Апрель 10, 2012, 23:03 »

Прочитать нельзя с другого приложения, но...

Но можно испоганить функции своего адресного пространства, соответственно вызвав целую серию сбоев и ошибок + вызов winApi функций с стрессовыми параметрами и прочим.

К сожалению в глубины сих действий я не лазил, но поступлю как еврей:

Как программа может убить систему в BSOD, если ей доступна только своя память? Улыбающийся

PS Причём что она может убить и убивает - не обсуждается. Это есмь факт. 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #71 : Апрель 11, 2012, 12:22 »

Ну вот, поймали Bepecа на неаккуратной фразе и рады  Улыбающийся

Возвращаясь к теме: конечно критиковать легко, недостатки очевидны: архитектуры нет, есть просто "блюдо спагетти" (слот/сигнал это провоцирует/поощряет). А как надо было делать правильно? Я не могу сказать потому что далек от веба и др (и слава богу).
Записан
Bepec
Гость
« Ответ #72 : Апрель 11, 2012, 13:13 »

Ааа... меня поймали на правде! Подмигивающий

А по теме - не видел и не представляю пока себе программу в вебе, которая оперирует сразу 20+ потоками. Просто не вижу смысла и необходимости.

А так Igors пришёл и указал на то, что мы не замечали - архитектурку то надо пересмотреть ТС'су Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #73 : Апрель 11, 2012, 13:47 »

А так Igors пришёл и указал на то, что мы не замечали - архитектурку то надо пересмотреть ТС'су Подмигивающий
Замечать-то замечали, но вот предлагать правильную почему-то не спешили. А давать указания автору темы (типа "ну ты персмотри") каждый может  Улыбающийся
Записан
V1KT0P
Гость
« Ответ #74 : Апрель 11, 2012, 13:50 »

Если честно, так и не решили. Так и не нашел где у меня память портится.
Цитировать
Проблема вылета - при парсинге URL "http://' отбрасывается "http:" и идёт поиск "//"

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

Ты говорил что:
Заметил странную особенность. Как Вы заметили этот фрагмент программы, который я выложил парсит каталог DMOZ. Но если его переписать таким образом, чтоб он парсил другой сайт (например Яндекс) - данная ошибка ни разу не наблюдалась. По крайней мере количество возвращенных результатов было около 150 000 и было остановлено вручную.
Может при парсинге DMOZ для какой-то страницы запрашивает авторизацию, что приводит к падению? Логируй запросы и ответы, может что интересное прояснится.
Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


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