Estoy trabajando en un problema bastante complicado que he estado en, literalmente, de una semana. He golpeado una pared muy dura y me duele la frente por golpearla, así que espero que alguien me pueda ayudar.Crash cuando se ejecuta la aplicación debido a la existencia de código no ejecutado en el archivo de origen - C++
Estoy utilizando Visual Studio 2005 para este proyecto - He instalado 2008, pero estaba corriendo en problemas similares cuando lo probé.
tenemos una aplicación que actualmente trabajan compilado con OpenCv1.1 y yo estoy tratando de actualizar a 2.2. Cuando cambiamos de forma estática al enlace a las nuevas bibliotecas, la aplicación falla, pero solo en el modo de lanzamiento. Por lo tanto, el enlace dinámico y la depuración funcionan bien.
El bloqueo está en std::vector
al llamar al push_back
.
Entonces me encontré con una aplicación de prueba de ejemplo que se ejecuta un código básico en OpenCV que funciona muy bien y luego tomó ese mismo código y lo añadió a nuestra aplicación. Ese código falla.
entonces destripado la aplicación por lo que no instanciar objetos de código, excepto la interfaz gráfica de usuario principal y 1 clase que llama ese código y todavía se estrelló. Sin embargo, si ejecuté ese código directamente en la GUI principal, funcionó bien.
luego empecé comentando enormes cantidades de la aplicación (en componentes que nunca debe ser instanciados) y, finalmente, me abrí camino hacia abajo, abajo, abajo hasta que ...
tengo una clase que tiene un método
void Foo()
{
std::vector<int> blah;
blah.begin();
}
Si este método se define en el encabezado, el código de prueba funciona, pero si este código se define en el archivo cpp, se bloquea. Además, si uso std::vector<double>
en lugar de int, también funciona.
Luego intenté jugar con las opciones del compilador y si tengo las optimizaciones desactivadas (/ Od) y Expansión de la función en línea configurada en Sólo __inline (/ Ob1) funciona incluso con el código en el archivo cpp.
Por supuesto, si volvemos a la aplicación con vísceras y cambiar las opciones del compilador por sí mismos, de que se estrelle.
Si alguien tiene alguna idea sobre esto, hágamelo saber.
Gracias, Liron
Cuando paso a través de él con el depurador es el programa capaz de cargar por completo o qué se cuelga antes de que incluso llega a principal (o WinMain)? Su problema es interesante porque, en general, considero que la vinculación dinámica es más problemática que la vinculación estática con los tiempos de ejecución – greatwolf
El programa se carga completamente bien. Luego presiono un botón en la interfaz gráfica (Qt) que ejecuta el código llamando a opencv. Si el código está allí en el botón, presione, funciona, pero si el código es llamado desde otra clase, se bloquea. – Liron
Actualicé el proyecto para no crear una GUI en absoluto y todavía se cuelga una vez que llamo al código de OpenCV. – Liron