Существуют ли проблемы при загрузке нескольких версий mscvrt **. Dll? - PullRequest
1 голос
/ 22 июня 2010

Мне не удалось найти много или любую информацию по этому вопросу. У меня есть проект, который построен с использованием VS2005, таким образом, используя mscvr80.dll. Мой проект также загружает стороннюю библиотеку, которая затем загружает mscvrt60.dll.

Теперь у меня есть странная ошибка в моей программе, в которой происходит сбой программы с нарушением чтения из памяти (в отладке он находится по адресу 0xcdcdcdcd, который из моих поисков описывает неинициализированное расположение памяти). Отладчик указывает, что нарушение находится в неизвестной функции в сторонней библиотеке.

Я связался с владельцами этой библиотеки, и они не знают ни о какой ошибке, как описано. Кроме того, у меня есть другие проекты, скомпилированные в VS60, которые используют эту стороннюю библиотеку, и которые не имеют подобных ошибок. Таким образом, мне интересно, могут ли быть проблемы с использованием нескольких распространенных версий времени выполнения? Я помню, как смутно слышал о ситуациях, когда одна среда выполнения (скажем, в .dll) могла бы выделить память, а затем, если другая версия пытается освободить эту память, это может вызвать проблемы. Однако я не могу вспомнить, где я читал это, и не могу найти много информации по этому вопросу.

Любой вклад очень ценится.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Если вы видите 0xcdcdcdcd, то вы можете смешивать библиотеку времени выполнения отладки и библиотеку времени выпуска. Они должны нормально работать вместе, но вы можете попробовать воспроизвести проблему, используя только среду выполнения релиза.

1 голос
/ 22 июня 2010

Освобождение памяти, выделенной одной версией среды выполнения в другой версии, безусловно, может вызвать проблемы.Нет никакой гарантии, что детали реализации кучи CRT остались одинаковыми между версиями.Если вы не можете найти другие обходные пути, вы можете попробовать скомпилировать ваше приложение против mscvrt60.dll.

...