tengo la siguiente línea en mi programa que causa una advertencia de tiempo de ejecución:La declaración codificada std :: string provoca desbordamiento de búfer
if (!is_directory("C:\\NGFMS_Debug\\Files") && !create_directories("C:\\NGFMS_Debug\\Files"))
El texto de la advertencia es tan así: "Se ha producido un desbordamiento del búfer en XXX.exe que ha dañado el estado interno del programa ".
La advertencia viene en la llamada a "is_directory (...)". Supongo que no se asigna el espacio para la cadena, pero pensé que la sintaxis era legal.
La función is_directory es una parte del impulso/filesystem.hpp y estoy usando los siguientes espacios de nombres:
using namespace boost;
using namespace boost::filesystem;
using namespace std;
Esto se está poniendo compilado bajo VS2005 C++. ¿Algunas ideas?
actualización
he intentado un par de cosas diferentes y dio un paso a través del código y esto es lo que encontré.
Si hago esto
char* path_chars_c;
path_chars_c = "C:\\Debug\\Files";
string path_str_c(path_chars_c);
El path_chars_c variable contiene la secuencia apropiada, pero el path_str_c variable contiene la basura después de la inicialización. Entonces parece que la inicialización de la cadena está rota aquí. ¿Alguien ha visto esto alguna vez?
Un desbordamiento de búfer no causa una excepción: si realmente está viendo una excepción, debe proporcionar más información. – ildjarn
@ildjarn Estoy viendo un punto de interrupción de Windows, supongo. El mensaje ha cambiado en consecuencia. – Ian
Estoy confundido. ¿Es esto una advertencia del compilador? Deberías publicar el mensaje textualmente. – Gabe