Я работаю над довольно сложной задачей, над которой я работаю буквально неделю. Я ударился об очень твердую стену, и у меня болит лоб от удара, поэтому я надеюсь, что кто-нибудь сможет мне помочь.
Я использую Visual Studio 2005 для этого проекта - у меня установлен 2008, но я столкнулся с аналогичными проблемами, когда попробовал его.
У нас есть работающее приложение, скомпилированное с OpenCv1.1, и я пытаюсь его обновить до 2.2. Когда мы переключаем статическую ссылку на новые библиотеки, приложение вылетает - но только в режиме выпуска. Таким образом, динамическое связывание и отладка работают нормально.
Сбой в std :: vector
при вызове push_back
.
Затем я придумал образец тестового приложения, которое запускается некоторый базовый код в opencv, который отлично работает, а затем взял тот же самый код и добавил его в наше приложение. Этот код не работает.
Затем я выпотрошил приложение, чтобы оно не создавало никаких объектов кода, кроме основного графического интерфейса и класса 1, который вызывал этот код, и оно все равно аварийно завершилось. Однако, если я запускал этот код непосредственно в основном интерфейсе, он работал нормально.
Затем я начал комментировать огромные объемы приложения (в компонентах, которые никогда не должны создаваться), и в конце концов я спустился вниз, пока ...
У меня есть класс с методом
void Foo()
{
std::vector<int> blah;
blah.begin();
}
Если этот метод определен в заголовке, тестовый код работает, но если этот код определен в файле cpp, происходит сбой. Кроме того, если я использую std :: vector
вместо int, он также работает.
Затем я попытался поиграть с параметрами компилятора, и если у меня отключена оптимизация (/ Od) и Для встроенного расширения функции установлено значение Only __inline (/ Ob1), оно работает даже с кодом, находящимся в файле cpp.
Конечно, если мы вернемся к необработанному приложению и изменим эти параметры компилятора сами по себе, оно выйдет из строя.
] Если у кого-то есть идеи по этому поводу, Лирон