Недавно мы попытались разбить некоторые из наших проектов Visual Studio на библиотеки, и все, казалось, скомпилировалось и построилось в тестовый проект с одним из проектов библиотеки как зависимость. Тем не менее, попытка запустить приложение дало нам следующее неприятное время выполнения сообщений об ошибке:Ошибка Weird MSC 8.0: «Значение ESP не было должным образом сохранено в вызове функции ...»
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function pointer declared with a different calling convention.
Мы никогда даже не указаны соглашений о вызовах (__cdecl и т.д.) для наших функций, оставив все переключатели компилятора по умолчанию. Я проверил, и настройки проекта согласованы для вызова соглашения по библиотеке и тестовым проектам.
Обновление: один из наших разработчиков изменил настройку «Основные параметры проверки выполнения» с «Both (/ RTC1, equiv. To/RTCsu)» на «Default», и время выполнения исчезло, оставив программу, , Я не доверяю этому вообще. Это было правильное решение или опасный взлом?
Будь так рад, что время исполнения поймало это для вас. Если бы этого не произошло, следующая вещь, которую должен был сделать компьютер, - это уничтожить содержимое стека и провалиться ужасно. (Отладка коррупции стека не для слабонервных.) – 2010-07-26 08:39:29
RE ваше обновление: Нет, это не правильное решение. Все, что вы сделали, это отключить проверки. Это похоже на похоронить голову в песке. Проблема все еще существует и, несомненно, взорвется вам позже, когда будет еще сложнее отследить. – 2016-12-30 13:37:48