Tengo una base de código C++ que ha estado funcionando durante mucho tiempo. La base de código era un conjunto de proyectos heredados VS 2003 que migré recientemente a VS 2008. La migración parecía tener éxito porque el programa resultante se creó y ejecutó.Error de aserción en CRT llamando _osfile() en VS 2008?
Reinstalé mi sistema operativo y todas las aplicaciones en una unidad fresca, y ahora cuando intento para depurar el programa en el depurador, recibo un error de aserción en el interior del CRT chsize
(en realidad, _chsize_s
). Específicamente (cosechado a lo esencial, haciendo caso omiso de los controles de seguridad):
FILE * testfile = fopen("P:\\_Dan\\local\\foogoo.txt", "w");
int filehandle = fileno(testfile);
chsize(filehandle, 0);
fwrite("goohoo", 1, 6, testfile);
fclose(testfile);
La aserción de depuración se produce dentro de chsize
- en concreto, en el código fuente de archivo chsize.c del CRT, en la línea siguiente:
_VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE((_osfile(filedes) & FOPEN), EBADF);
. .. donde filedes
coincide con filehandle
.
Pensé que posiblemente el problema podría ser el resultado de no tener una versión anterior de VS instalada en el nuevo sistema (solo VS 2008), porque algunas bibliotecas de terceros requieren VS 8.0 redistribuible, aunque en el sistema antiguo las cosas parecían estar construyendo y funcionando perfectamente con VS 2008. Por lo tanto, instalé VS 2005 (no 2003). Sin embargo, el problema continúa ocurriendo.
Cualquier sugerencia sería muy bienvenida.
* Actualización - El problema no está relacionado con chsize
. Ver mi respuesta a continuación.
Desde que lo recortó, ¿puede confirmar que ha probado ese archivo de prueba! = NULL? Además, tenga en cuenta que los documentos de MSDN dicen que chsize está en desuso a partir de VS2005: http://msdn.microsoft.com/en-us/library/ms235502(v=VS.90).aspx: ofrecen alternativas. – holtavolt
Gracias por preguntar, sí, ¡confirmé cuidadosamente el archivo de prueba! = Nulo. En cualquier caso, resolví el problema, una discrepancia que involucraba la elección del modelo de subprocesamiento c-runtime (ver mi respuesta) y no relacionado con chsize. –