![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: нет Всего: 8 |
При копировании VARIANT получаю ошибку Access violation reading location.
В мсдн пишут, что VariantCopy method is not threadsafe. Мое приложение действительно многопоточное. Кроме того, скомпилированая дэбаг версия запущеная отладчиком студии, работает нормально, а запущеная вне студии получает исключение Access violation reading location. В чем именно опасность метода VariantCopy в многопоточном приложении и как устранить такую опасность? |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
voov, а может стоит попробовать memcpy или что-то в этом духе?
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
1) variant-приемник должен освободить свои ресурсы перед приёмом 2) должно произвестись копирование из источника в приёмник. В многопоточном приложении теоретически возможно такое, что в приёмник присвоятся новые данные\ресурсы между освобождением старых и присвоением новых при копировании. -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: нет Всего: 8 |
а как избежать такой ситуации? можно ли здесь както использовать CriticalSection или нужно по другому копировать? |
|||
|
||||
| voov |
|
||||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: нет Всего: 8 |
Следующий код:
запущеный отладчиком студии (F5) работает без ошибок. Если запустить приложение вне студии (exe-файл из проводника, например), идут ошибки. Сделал так: запустил приложение вне студии, сделал Attach to process... из студии и вижу такую штуку: 1. ошибки возникают только в том случае, если src содержит массив, но не всякий раз. некоторые вызовы, где src - массив, проходят успешно. 2. в случае возникновения ошибки result (E_INVALIDARG) показывает, что "Параметр задан неверно.". При этом портится src. Вместо safearray of R4 = [3](5.0000000,5.0000000,5.0000000) (до вызова VariantCopy), он показывает safearray of R4 = [0]() (после вызова VariantCopy) и т.п. Получается, что во время выполнения VariantCopy, портится источник данных. Но как, где и почему портится непонятно. src создается перед вызовом этим же потоком и удаляется только после выполнения вышеуказаного кода
Попробую копировать вручную, но энтузиазма нет как и нет уверености, что поможет. Может кто-то все-таки может подсказать что-то дельное? |
||||
|
|||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: нет Всего: 8 |
Вопрос снят.
Проблема была связана с освобождением памяти. Долго объяснять, скажу лишь, что ItemData это обертка для варианта, деструктор которой вызывает VariantClear. В одном месте я нашел лишний вызов VariantClear для данных из этой обертки. Из-за чего в деструкторе вызов VariantClear говорил что память заблокирована. После удаления лишнего вызова VariantClear ошибки прекратились. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |