Вверх ↑
Этот топик читают: Гость
Ответов: 704
Рейтинг: 7
#1: 2011-10-03 22:52:40 ЛС | профиль | цитата
В общем дорисовался я до "Access Violation at address 004144B9 ... Read of address 00000000". При чем программа моя работает-работает, и тут выдает эдакое сообщение, и продолжает дальше пахать.
Какие причины могут вызывать такое? Получается память вычитана до моего обращения к ней? Видать что-то я недавно сделал, что оно так себя стало вести, но добавлял в основном только компоненты мемори в связке с другими. Может винда крадет память, занятую компонентом мемори в процессе работы? Может есть какие-то правила куда копать именно при такой ошибке? Может я живу не по совести, измываясь так над HiAsm и он меня наказал?
карма: 0

0
Разработчик
Ответов: 26217
Рейтинг: 2138
#2: 2011-10-03 22:55:04 ЛС | профиль | цитата
Neo писал(а):
куда копать именно при такой ошибке?

Попытка обращения к несуществующему адресу. Что-то удалили, а к удаленному было обращение, или возврат к адресу, которого не стало. Возможно, была попытка удаления контейнера в котором работает поток, неостановленный перед удалением
карма: 22

1
Голосовали:Neo
Ответов: 3889
Рейтинг: 362
#3: 2011-10-03 22:57:33 ЛС | профиль | цитата
Довольно частая ошибка при таймерах, потоках и операциях с менеджером памяти, поищите на форуме, я не так давно с дебаггером всё на чистую воду выводил.
карма: 1

0
Ответов: 704
Рейтинг: 7
#4: 2011-10-03 22:58:35 ЛС | профиль | цитата
nesco, разве можно собрать логику, которая бы обращалась к несуществующему или удаленному адресу? Кроме мемори еще активно использую стеки и БД в памяти - как его можно так испортить, чтоб оно обратилось к несуществующему? или это аппаратная/программная проблема извне на мою программулинку?
карма: 0

0
Разработчик
Ответов: 26217
Рейтинг: 2138
#5: 2011-10-03 22:59:15 ЛС | профиль | цитата
1nd1g0 писал(а):
при таймерах

Ну, при таймерах навряд ли, если только не MMTimer, работающий в отдельном потоке
карма: 22

0
Ответов: 704
Рейтинг: 7
#6: 2011-10-03 23:01:19 ЛС | профиль | цитата
1nd1g0, ВО! Точно! Потоки я создавал, но зацикленные. То есть без остановки после первой итерации. Буду искать по теме, спасибо за наводку.
------------ Дoбавленo в 23.01:
Получается, что где-то асинхронный поток обращается к памяти из синхронного при перезаписи оной?
карма: 0

0
Разработчик
Ответов: 26217
Рейтинг: 2138
#7: 2011-10-03 23:05:19 ЛС | профиль | цитата
Neo писал(а):
1nd1g0, ВО! Точно! Потоки я создавал, но зацикленные. То есть без остановки после первой итерации

А я тебе про что писал
nesco писал(а):
Возможно, была попытка удаления контейнера в котором работает поток, неостановленный перед удалением

карма: 22

0
Ответов: 704
Рейтинг: 7
#8: 2011-10-03 23:11:30 ЛС | профиль | цитата
nesco писал(а):
сначала была только первая часть сообщения - не увидел добавленного потом.
карма: 0

0
Разработчик
Ответов: 26217
Рейтинг: 2138
#9: 2011-10-03 23:13:34 ЛС | профиль | цитата
Neo писал(а):
сначала была только первая часть сообщения - не увидел добавленного потом

Гы. Торопятся читать, даже с мыслями собраться не дают (тут я недовольно проворчал)
карма: 22

0
Ответов: 704
Рейтинг: 7
#10: 2011-10-03 23:20:36 ЛС | профиль | цитата
1nd1g0 писал(а):
не так давно с дебаггером
можно попросить ссылку на тему? Тема не Ваша - по профилю не показывает.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#11: 2011-10-03 23:25:39 ЛС | профиль | цитата
Neo, Например, тут раскрывается роль некоторых элементов, которые не очевидным (для составляющего схему) способом порождают потоки и повышают вероятность одновременного ошибочного доступа к данным.
карма: 1

0
Ответов: 704
Рейтинг: 7
#12: 2011-10-10 17:54:16 ЛС | профиль | цитата
Вроде разобрался с ошибкой, как появилась загрузка под 100 процентов. В программе используются зацикленные потоки, которые обслуживают массивы данных (обрабатывают накопившиеся очереди). При этом мониторинг загрузки текущим процессом показывает в это время 1-0 процентов, а загрузка процессом в виндовом диспетчере задач - 89-100 процентов. Это наверное идет загрузка в каком-то из отдельных потоков, и поэтому она не отслеживается по получению "загрузки CPU текущим процессом"?
------------ Дoбавленo в 17.46:
Начинается эта загрузка под 100% после какого-то промежутка времени. Часов 4-7.
------------ Дoбавленo в 17.54:
еще принимаются входящие данные по TCP и идет отправка данных по TCP. Думаю может они как-то грузят всю программу - все таки работа с сетью всегда была с сюрпризами
карма: 0

0
Ответов: 3889
Рейтинг: 362
#13: 2011-10-10 18:15:58 ЛС | профиль | цитата
Neo писал(а):
В программе используются зацикленные потоки

Зацикленные
карма: 1

0
Ответов: 704
Рейтинг: 7
#14: 2011-10-10 18:32:19 ЛС | профиль | цитата
1nd1g0, а как же тогда? Плодить кучу потоков нельзя, но и зацикливать нельзя?
Вот как я реализовал в конечном итоге обработку очереди. Поток получается один, но отрабатывает только после завершения исполнения предыдущих данных.
code_25427.txt
Кстати, так а почему такая разница в загрузке ЦП?
карма: 0

0
файлы: 1code_25427.txt [1.3KB] [183]
Ответов: 3889
Рейтинг: 362
#15: 2011-10-10 18:44:15 ЛС | профиль | цитата
Neo, Вы, использовали термин, по которому Вас неправильно можно понять. По логике, зацикленные - это когда конец ветки из элементов замкнут на начало этой же ветки.

Вы уверены, что Ваши потоки успевают отработать за 15 мсек?
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)