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 

List Index out of bounds(266)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: List Index out of bounds(266) Responder citando

Este es el error que salta en mi aplicación y no entiendo el porqué Confused . Se que normalmente este error salta cuando se intenta acceder a un valor que está fuera de un rango determinado, pero no logro averiguar donde está ese rango ni de qué valor se trata, en el entorno de desarrolo me dice que es un "EStringListError", es la única pista que tengo, y a continuación os pongo el código en el cual me salta:
//En el OnConnect de un TNMPOP3....
StatusBar1->Panels->Items[1]->Text = "Conectado";
AnsiString ruta = ExtractFilePath(Application->ExeName);
lista->Items->Clear();
Memo1->Lines->Clear();
barra->Progress = 0;
barra->Visible = false;
int i = NMPOP31->MailCount;
barra->MaxValue = NMPOP31->MailCount;
TListItem *ite;
AnsiString recibido;
barra->Visible = true;
for (int a=1;a<=i;a++){
if (NMPOP31->Connected==true){
TStringList *liste = new TStringList;
StatusBar1->Panels->Items[2]->Text = NMPOP31->Status;
NMPOP31->GetMailMessage(a);
ite = lista->Items->Add(); //Aquí me salta el error.
ite->ImageIndex = 0;
ite->Caption = NMPOP31->MailMessage->From;
ite->SubItems->Add(NMPOP31->MailMessage->Subject);
ite->SubItems->Add(IntToStr(NMPOP31->MailMessage->Attachments->Count));
ite->SubItems->Add(NMPOP31->MailMessage->MessageId);
liste->AddStrings(NMPOP31->MailMessage->Head);
recibido = liste->Strings[3].TrimLeft();
ite->SubItems->Add(recibido);
barra->Progress++;
try {
NMPOP31->MailMessage->Attachments->SaveToFile(ruta+"\entrante\\"+"lista"+IntToStr(a)+".txt");
NMPOP31->MailMessage->Body->SaveToFile(ruta+"\entrante\\"+IntToStr(a)+".txt");
NMPOP31->MailMessage->Body->SaveToFile(ruta+"\entrante\\"+IntToStr(a)+".html");
}
catch (EFCreateError &E){
NMPOP31->Abort();
NMPOP31->Disconnect();
Application->MessageBoxA("Se produjo un error al procesar el mensaje actual, la recepción de mensajes quedará retenida.",
"Error en el mensaje",MB_OK|MB_ICONSTOP);
}
delete liste;
}
}
/*Es la segunda vez que topo con este problema y en la primera ya tuve que abandonar Embarassed , espero tener más suerte esta vez.
AH! y Mucha salud para todos en este nuevo año Laughing .*/
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿Que añades a la lista?
Código:

ite = lista->Items->Add(); //Aquí me salta el error.


Dentro del Add debería haber un AnsiString a añadir a la lista. además esa asignación es un poco extraña, pues lista->Items->Add devolverá un número indicando la posición donde se ha añadido a la lista. Y sin embargo en tu codigo ite no es un entero. Luego creo que algo lo estas haciendo mal.

¿Que reprensenta en tu programa lista?

ciao y Feliz Año tuqui.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Gracias Xyvy por tu interés Wink , a ver si me explico:
lista es un TListView (inicialmente vacío), previamente a la entrada al bucle he creado un objeto de la clase TListItem con la siguiente línea:

TListItem *ite;

y según se recorre el bucle voy añadiendo items al TListView, los items que se añaden son de la nueva clase creada.

ite = lista->Items->Add();

el método Add() espera un objeto de la clase TListItem por lo que la asignación se hace con la línea anterior. Esta forma de añadir los items la aprendí de este foro así que seguramente habrá alguien que lo sepa explicar mejor. Saludos.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola!

Un error del tipo "out of bounds" salta porque tratas de acceder a más elementos de los que en realidad tiene la lista. Es decir, supón que tienes un TListBox con 3 elementos, estos iran numerados desde el 0 al 2 y si tratas de acceder un un elemento que no existe te dará el error. Por ejemplo:
Código:

for(int x=0;x<ListBox->Items->Count;x++)
  ShowMessage(ListBox->Items->Strings[x]);

Esto funcionará bien pero si el for lo cambias por:
Código:

for(int x=0;x<ListBox->Items->Count+1;x++)

Te dará el error List index out of bounds(3) . Comprueba bien en tu código que no tratas de acceder a un elemento que no existe en la lista

Espero haberme explicado bien y que te hasyas orientado un poco del posible error.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Marky, pero ya tenía mas o menos claros esos conceptos. Siguiendo tu consejo he repasado la composición del "FOR" y creo que la tengo bien:

fot (int a=1;a<=i;a++){
//Rellenamos el TListView...
}

Donde i corresponde al NMPOP3->MailCount.
Sigo con el problema Sad .
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

he llegado a la conclusión de que es muy posible de que el fallo esté en el servidor de correo, ya que el error saltaba justo al intentar abrir el mensaje número 46.
Tras borrar un montón de mensajes y dejar la bandeja de entrada únicamente con 41 mensajes el programa ya funciona OK y no salta el error de marras. También y antes de borrar mensajes probé a cambiar el bucle "FOR" por un "While" y también saltaba el mismo error por eso sigo creyendo que el fallo no es del código, lo cual no quiere decir que tal vez exista un código capaz de saltarse ese error.
Todas las ideas serán bienvenidas, gracias.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Tienes razón perdona Tuqui, por eso pregunté que era lista pues si era una TStringList estaba mal, pero claro no lo es, luego debe estar correcto.

Me podrías decir que vale la variable i cuando te salta el error si depuras el bucle con paso a paso.

Tus valores mínimo y maximo para el bucle son correctos de cara a leer todos los mensajes pues en la ayuda de GetMailMessage, especifica claramente de 1 a MailCount, aunque quizás suceda el error en los TList precisamente por eso.

Por favor si lo depuras mira a ver que vale la i.

Ciao y suerte.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hey XyVy Smile , la variable " i " la utilizo para almacenar el valor de MailCount al principio y antes de entrar en el bucle, por tanto ese valor en teoría no debe alterarse durante la ejecución de dicho bucle, de hecho lo he comprabado y así es: el valor es siempre el mismo (la cuenta del total de mensajes en la bandeja de entrada).
De todas formas a día de hoy el número de mensajes se ha incrementado sobrepasando otra vez el número en el cual antes me daba el error y ya no lo da, debe haber brujas por algún lado Rolling Eyes .
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Entiendo Tuqui, aunque mi pregunta no era por saber si el valor superaba o no superaba el MailCount, sino saber en que numero concreto te daba el error.

En fín sino te dá, pues nada, pero hay que intentar no dejar las cosas al azar, y depurar los errores para corregirlos adecuadamente, porque vale imaginate que tienes muchos mensajes, quizás no te salte el error, pero y si estas haciendo una aplicación y luego se la vas a pasar a un usuario a priori no sabes que comportamiento va a tener el programa si dejas el error sin controlar.

En fin hagas lo que hagas suerte!!
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
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.