Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Error en "dstring.h"

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Error en "dstring.h" Responder citando

¡Hola!

Estoy haciendo una aplicación para realizar copias de seguridad. Es bastante sencilla. Tengo un error que me salta al salir de esta función:

void __fastcall TfrmPpal::btnComenzarClick(TObject *Sender)
{
AnsiString DirectorioParaCrear = "";

DatosCopia.DirectorioFinal = ExtraerDirectorioFinal(DatosCopia.Origen);
DirectorioParaCrear = DatosCopia.Destino + DatosCopia.DirectorioFinal;

if (!DatosCorrectos())
return;

//calcular primero si hay espacio
EspacioRequerido = 0;

lblProcesoEnCurso->Caption = "COMPROBANDO ESPACIO EN DISCO...";
lblFicheroEnCurso->Caption = AnsiString(EspacioRequerido);

//si no existe el directorio Origen en Destino, crearlo
if (!DirectoryExists(DirectorioParaCrear.c_str()))
{
if (!CreateDirectory(DirectorioParaCrear.c_str(), NULL))
{
MessageDlg("No se puede crear el directorio \"" + DatosCopia.DirectorioFinal + "\" en Destino.",
mtWarning, TMsgDlgButtons() << mbOK, 0);
return;
}
}

CrearHilo(CALCULAR_ESPACIO, true);

thdCalcularEspacio->Resume();
Flags.ProcesoEnCurso = CALCULAR_ESPACIO;
}
//---------------------------------------------------------------------------


El error me da en el fichero dstring.h y es un error de rango:

---------------------------
Debugger Exception Notification
---------------------------
Project CopiaSeguridad.exe raised exception class ERangeError with message ''. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------


A continuación pego el trozo de código donde salta el error:

...
#else

char& __fastcall operator [](const int idx)
{
ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??
Unique(); // Ensure we're not ref-counted
return Data[idx-1];
}

#endif
...

La variable Data tiene como valor la ruta contenida en la variable "DirectorioParaCrear" de la primera función que he puesto. La variable idx vale 0.

Hasta donde entiendo, el error se produce por valer "idx" 0, ya que si cambio su valor a 25 (por ejemplo), no da error y continua la ejecución del programa sin problemas. Lo que no entiendo es por qué idx vale 0. Creo que idx hace referencia a la longitud de la cadena a tratar, que no está vacía. Además, no se por qué está tratando esa cadena al salir de la función.

Gracias por adelantado.
Volver arriba
Mensaje    Asunto: Responder citando

Vale, solucionado.

Tenía unas variables declaradas como char * que luego cambié a AnsiString... menos en un sitio que se me pasó. Lo curioso del tema es que si tu pones nom_var[0] para una variable de tipo AnsiString el compilador no da error. Pero al ejecutarse si.

Salu2
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.