 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Invitado
|
Publicado: Lun 13 Dic, 2004 1:32 pm Asunto: Error en "dstring.h" |
|
|
¡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 |
|
 |
Invitado
|
Publicado: Lun 13 Dic, 2004 3:18 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|