2008-12-23 12 views
5

que sólo tienen 1 línea de código, y esto es:¿Por qué recibo un error de desbordamiento del búfer con esta línea de código?

pcrecpp::RE re("abc"); 

dentro de una función OnBnClickedButtonGo(). Y esta función falla en el modo de lanzamiento, pero funciona bien en modo de depuración.

(estoy usando Visual Studio 8 en Windows XP.)

El mensaje de error es:

A buffer overrun has occurred in testregex.exe which has corrupted the program's 
internal state. Press Break to debug the program or Continue to terminate 
the program. 
For more details please see Help topic 'How to debug Buffer Overrun Issues'. 

Sospecho que es su destructor, que es invisible e implícita ... pero don No lo sé realmente

PD: Estoy conectado estáticamente a PCRE lib version 7.8. PS2: No es muy relevante, pero puede ayudar a algunas personas que tienen problemas para conectarse a la biblioteca PCRE (tardé horas en resolverlo): incluya la línea #define PCRE_STATIC.

+0

¿Construyó la biblioteca, o era una libra enlatada? De cualquier manera, ¿se compiló con el mismo compilador? Si no, intentaría construir la lib con su compilador y ver si eso ayuda. –

Respuesta

0

Si está sucediendo solo en el modo de lanzamiento, es posible que algo se "optimice". Intente hacer algo más que solo un trazador de líneas, como un partido() y tal vez incluso imprimir los partidos.

3

Tuve el mismo mensaje de error en mi caso. En la depuración está todo bien, pero en el lanzamiento aparece el mensaje de error. Tengo una biblioteca C/C++ nativa como native.dll. Creé una biblioteca mixta de C++ administrada y no administrada, que es un contenedor para esa biblioteca en .NET. En algún lugar de este mixed.dll Tengo una declaración de la función de firma no administrado, como:

typedef void (*FunctionOnStartSend)(); 

para ello el recibo del mensaje, pero si añado una "palabra mágica" allí, entonces no hay ningún mensaje de error:

typedef void (__stdcall *FunctionOnStartSend)(); 
+0

Brillante respuesta, hombre! – LmTinyToon

0

Aquí está mi historia fresca: hace aproximadamente un mes tengo un fallo de enlace extraña del VS2008 y ese día cavé que la fijación de _SECURE_SCL = 0 puede ayudar (ver link text). Y ayudó. Ese día me ayudó y me acaba de propagar esta configuración a todas las libs que construimos en el equipo, eso es porque MS dice que dos libs compiladas con diferentes _SECURE_SCL son incompartibles.

Tiempo transcurrido y hace tres días que tengo un error cuando VS2008 dice que el mensaje de error que vemos en la primera publicación. Y no hay ayuda del depurador porque solo se sobrepasa en la versión Release. Pasé casi 2 días bombeando el código de las libs y el rebasamiento fue defectuoso de línea a línea. ¡Finalmente comencé a verificar las configuraciones de construcción línea por línea y calculé la diferencia en esta configuración!

¿Por qué, oh por qué Microsoft chicos no pueden incrustar una pequeña comprobación en el código de cargador dinámico para probar que la biblioteca ejecutando en ese momento y el que va a ser con carga dinámica se incompartible?! Un poco de código que ahorra tiempo a la gente. ¡Paja!

Cuestiones relacionadas