У меня смешанная сборка по x64. Сталкнулся с такой проблемой. При вызове определенной функции, в определенном месте, вываливается ошибка 0xC0000005 (ошибка именно при обращении к инструкции call).
Данная проблема не проявлялась не в x86, не в дебажной версии. В релизе x64 ошибка исчезла после того, как я поменял оптимизацию по размеру на оптимизацию по скорости. Это глюк оптимизации или просто проявление ошибки стало другим (вывалится в другом месте) из за изменения машинного кода?
Здравствуйте, hooky-mars, Вы писали:
HM>Saluer!
HM>У меня смешанная сборка по x64. Сталкнулся с такой проблемой. При вызове определенной функции, в определенном месте, вываливается ошибка 0xC0000005 (ошибка именно при обращении к инструкции call). HM>Данная проблема не проявлялась не в x86, не в дебажной версии. В релизе x64 ошибка исчезла после того, как я поменял оптимизацию по размеру на оптимизацию по скорости. Это глюк оптимизации или просто проявление ошибки стало другим (вывалится в другом месте) из за изменения машинного кода?
У меня было что-то похожее — в 64-битном варианте вылезала такая же ошибка. В отладчике это выглядело странно: на вход в функцию передавался хороший годный указатель на буфер с текстом, а внутри нее он уже был другим (негодным). Кроме того в какой-то из них дебагер ходил по инструкциям не в том порядке, как они идут по тексту программы (видимо, оптимизатор как-то ловко их переупорядочил). В конце концов, поставил вокруг нескольких этих функций #pragma optimize("", off)/("", on) и все заработало.