[QUOTE]Сергей Викторович написал:
Запустили под отладчиком,
ошибку выдает стабильно.
Подскажите, что можно из сообщений отладчика понять, почему программа слетает?[/QUOTE]
В диалоге на последнем скриншоте нажать "Break" и смотреть стек вызовов (Call Stack). Там процедуры внутри ядра будут показаны адресами, а перед ними будут вызовы, откуда программа туда приходит из Вашего кода.
Судя по скриншотам падение происходит строго на 88 записи.
Если бы это было связано с утечкой памяти, ошибка была бы плавающая.
Попробуйте сделать обработку не в цикле, а только этой конкретной записи.
Если ошибка появляется на ней одной, надо смотреть содержимое, что из нее передается в MAPAPI.
Как предположение, bd_Zones.QSanitZonesDopIDObject.AsString может указывать на строку, не завершающуюся нулем, либо эта строка содержит не юникод-символы.
Также память может портиться где-то в другом месте программы, а падать уже в ГИС-ядре.
К примеру, на смену записи в DataSet добавлен обработчик. Когда Вы в цикле проходите по записям, выполняется код обработчика. Надо смотреть, что внутри.
Вариант проверить где именно портится память - в ГИС-ядре или в коде программы, - временно разделить обработку.
Переберите в цикле все площадные объекты карты и также как сейчас создайте подписи для их точек метрики (но без обращения к БД).
В mapAppendSemanticUnicode вместо bd_Zones.QSanitZonesDopIDObject.AsString передайте произвольный текст, чтобы не трогать БД.
Эффект тот же?
Запустили под отладчиком,
ошибку выдает стабильно.
Подскажите, что можно из сообщений отладчика понять, почему программа слетает?[/QUOTE]
В диалоге на последнем скриншоте нажать "Break" и смотреть стек вызовов (Call Stack). Там процедуры внутри ядра будут показаны адресами, а перед ними будут вызовы, откуда программа туда приходит из Вашего кода.
Судя по скриншотам падение происходит строго на 88 записи.
Если бы это было связано с утечкой памяти, ошибка была бы плавающая.
Попробуйте сделать обработку не в цикле, а только этой конкретной записи.
Если ошибка появляется на ней одной, надо смотреть содержимое, что из нее передается в MAPAPI.
Как предположение, bd_Zones.QSanitZonesDopIDObject.AsString может указывать на строку, не завершающуюся нулем, либо эта строка содержит не юникод-символы.
Также память может портиться где-то в другом месте программы, а падать уже в ГИС-ядре.
К примеру, на смену записи в DataSet добавлен обработчик. Когда Вы в цикле проходите по записям, выполняется код обработчика. Надо смотреть, что внутри.
Вариант проверить где именно портится память - в ГИС-ядре или в коде программы, - временно разделить обработку.
Переберите в цикле все площадные объекты карты и также как сейчас создайте подписи для их точек метрики (но без обращения к БД).
В mapAppendSemanticUnicode вместо bd_Zones.QSanitZonesDopIDObject.AsString передайте произвольный текст, чтобы не трогать БД.
Эффект тот же?