Какие причины могут вызывать такое? Получается память вычитана до моего обращения к ней? Видать что-то я недавно сделал, что оно так себя стало вести, но добавлял в основном только компоненты мемори в связке с другими. Может винда крадет память, занятую компонентом мемори в процессе работы? Может есть какие-то правила куда копать именно при такой ошибке? Может я живу не по совести, измываясь так над HiAsm и он меня наказал?
Этот топик читают: Гость
|
Ответов: 704
Рейтинг: 7
|
|||
|
В общем дорисовался я до "Access Violation at address 004144B9 ... Read of address 00000000". При чем программа моя работает-работает, и тут выдает эдакое сообщение, и продолжает дальше пахать.
Какие причины могут вызывать такое? Получается память вычитана до моего обращения к ней? Видать что-то я недавно сделал, что оно так себя стало вести, но добавлял в основном только компоненты мемори в связке с другими. Может винда крадет память, занятую компонентом мемори в процессе работы? Может есть какие-то правила куда копать именно при такой ошибке? Может я живу не по совести, измываясь так над HiAsm и он меня наказал? |
|||
| карма: 0 |
|
|
Разработчик
Ответов: 26322
Рейтинг: 2147
|
|||
|
Neo писал(а): куда копать именно при такой ошибке?Попытка обращения к несуществующему адресу. Что-то удалили, а к удаленному было обращение, или возврат к адресу, которого не стало. Возможно, была попытка удаления контейнера в котором работает поток, неостановленный перед удалением |
|||
| карма: 22 |
| ||
| Голосовали: | Neo |
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Довольно частая ошибка при таймерах, потоках и операциях с менеджером памяти, поищите на форуме, я не так давно с дебаггером всё на чистую воду выводил.
|
|||
| карма: 1 |
|
|
Ответов: 704
Рейтинг: 7
|
|||
|
nesco, разве можно собрать логику, которая бы обращалась к несуществующему или удаленному адресу? Кроме мемори еще активно использую стеки и БД в памяти - как его можно так испортить, чтоб оно обратилось к несуществующему? или это аппаратная/программная проблема извне на мою программулинку?
|
|||
| карма: 0 |
|
|
Разработчик
Ответов: 26322
Рейтинг: 2147
|
|||
|
1nd1g0 писал(а): при таймерахНу, при таймерах навряд ли, если только не MMTimer, работающий в отдельном потоке |
|||
| карма: 22 |
|
|
Ответов: 704
Рейтинг: 7
|
|||
|
1nd1g0, ВО! Точно! Потоки я создавал, но зацикленные. То есть без остановки после первой итерации. Буду искать по теме, спасибо за наводку.
------------ Дoбавленo в 23.01: Получается, что где-то асинхронный поток обращается к памяти из синхронного при перезаписи оной? |
|||
| карма: 0 |
|
|
Разработчик
Ответов: 26322
Рейтинг: 2147
|
|||
|
Neo писал(а): 1nd1g0, ВО! Точно! Потоки я создавал, но зацикленные. То есть без остановки после первой итерацииА я тебе про что писал nesco писал(а): Возможно, была попытка удаления контейнера в котором работает поток, неостановленный перед удалением |
|||
| карма: 22 |
|
|
Ответов: 704
Рейтинг: 7
|
|||
|
nesco писал(а): |
|||
| карма: 0 |
|
|
Разработчик
Ответов: 26322
Рейтинг: 2147
|
|||
|
Neo писал(а): сначала была только первая часть сообщения - не увидел добавленного потомГы. Торопятся читать, даже с мыслями собраться не дают (тут я недовольно проворчал) |
|||
| карма: 22 |
|
|
Ответов: 704
Рейтинг: 7
|
|||
|
1nd1g0 писал(а): не так давно с дебаггером |
|||
| карма: 0 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Neo, Например, тут раскрывается роль некоторых элементов, которые не очевидным (для составляющего схему) способом порождают потоки и повышают вероятность одновременного ошибочного доступа к данным.
|
|||
| карма: 1 |
|
|
Ответов: 704
Рейтинг: 7
|
|||
|
Вроде разобрался с ошибкой, как появилась загрузка под 100 процентов. В программе используются зацикленные потоки, которые обслуживают массивы данных (обрабатывают накопившиеся очереди). При этом мониторинг загрузки текущим процессом показывает в это время 1-0 процентов, а загрузка процессом в виндовом диспетчере задач - 89-100 процентов. Это наверное идет загрузка в каком-то из отдельных потоков, и поэтому она не отслеживается по получению "загрузки CPU текущим процессом"?
------------ Дoбавленo в 17.46: Начинается эта загрузка под 100% после какого-то промежутка времени. Часов 4-7. ------------ Дoбавленo в 17.54: еще принимаются входящие данные по TCP и идет отправка данных по TCP. Думаю может они как-то грузят всю программу - все таки работа с сетью всегда была с сюрпризами |
|||
| карма: 0 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Neo писал(а): В программе используются зацикленные потокиЗацикленные |
|||
| карма: 1 |
|
|
Ответов: 704
Рейтинг: 7
|
|||
|
1nd1g0, а как же тогда? Плодить кучу потоков нельзя, но и зацикливать нельзя?
Вот как я реализовал в конечном итоге обработку очереди. Поток получается один, но отрабатывает только после завершения исполнения предыдущих данных. code_25427.txt Кстати, так а почему такая разница в загрузке ЦП? |
|||
| карма: 0 |
| ||
| файлы: 1 | code_25427.txt [1.3KB] [209] |
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Neo, Вы, использовали термин, по которому Вас неправильно можно понять. По логике, зацикленные - это когда конец ветки из элементов замкнут на начало этой же ветки.
Вы уверены, что Ваши потоки успевают отработать за 15 мсек? |
|||
| карма: 1 |
|



Поиск
Друзья
Администрация