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