Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   List Index out of bounds() (https://www.clubdelphi.com/foros/showthread.php?t=81791)

Cristhor1982 18-12-2012 13:09:29

List Index out of bounds()
 
No se por que me ocurre esto, alguna idea?

Casimiro Notevi 18-12-2012 13:45:09

Mira al final de esta página, abajo del todo.

Faust 18-12-2012 16:07:23

Cita:

Empezado por Casimiro Notevi (Mensaje 452040)
Mira al final de esta página, abajo del todo.

Acaso todavía no llega la bola mágica que pidieron :D :D :D

Casimiro Notevi 18-12-2012 16:20:52

Cita:

Empezado por Faust (Mensaje 452049)
Acaso todavía no llega la bola mágica que pidieron :D :D :D

Nada, a ver si este año se porta bien algún alma caritativa y nos regala una :rolleyes:

nlsgarcia 18-12-2012 17:03:39

Cristhor1982,

El problema es que estas tratando de accesar una posición de memoria no asignada a una lista, por ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
   StrList : TStringList;
begin
   StrList := TStringList.Create;
   for i:= 0 to 9 do
      StrList.Add(IntToStr(i));

   for i := 0 to 10 do
      ShowMessage(StrList.Strings[i]);
end;
En el código anterior se asignan 10 elementos (0 al 9) a una variable tipo TStringList y luego se trata de leer 11 elementos (0 al 10), lo cual produce el error List index out of bounds (10), el valor entre paréntesis (En este caso 10) es la posición de memoria que esta fuera de los límites asignados a la lista (Posición 11), lo cual es lógico dado que la lista solo tiene 10 elementos. La forma correcta de accesar la lista es dentro de los límites de la misma, por ejemplo:
Código Delphi [-]
   for i := 0 to StrList.Count-1 do
      ShowMessage(StrList.Strings[i]);
Igualmente si tratáramos de asignar un valor negativo al índice de la lista, por ejemplo -1, nos daría el error List index out of bounds (-1) por las mismas razones comentadas anteriormente.

Espero sea útil :)

Nelson.

Al González 18-12-2012 17:14:39

Cita:

Empezado por Cristhor1982 (Mensaje 452039)
No se por que me ocurre esto, alguna idea?

Así, a bote pronto, puede que te diera flojera preguntar, y, con tal de resolver tu duda aplicando el menor esfuerzo posible, la planteaste con apenas una breve frase, sin dar el mínimo de detalles que se espera de alguien que pregunta con genuino interés de resolver un problema.

Puede que no tuvieras muchas ganas que digamos en resolver la duda, o bien, que la desesperación te haya orillado a plantearla de esa manera. Lamentablemente es algo que ocurre con muchos chavales en casi cualquier rincón de Internet. Pareciera que los invade la pereza a la hora de enfrentarse a una situación adversa. Es triste y lastimero encontrar esa dejadez entre los colegas programadores. Una cosa es ser novato y otra conducirse al "ahí se va".

Concretando, habría que conocerte más a fondo e indagar en tu historia personal para poder contestar tu pregunta de por qué te ocurre eso. Arriesgándome, podría ser que estás acostumbrado a que otros te faciliten constantemente la vida, sin esforzarse lo suficiente para ganártela por ti mismo. Pero esto, claro, solamente es una idea de muchas teorías posibles.

En fin, espero que todo mejore y encuentres la respuesta a tu duda existencial.

ecfisa 18-12-2012 17:22:06

Cita:

Empezado por Cristhor1982 (Mensaje 452039)
No se por que me ocurre esto, alguna idea?

Si claro, la excepción EStringListError se dispara por que estas intentando acceder a un elemento inexistente de una instancia de TStrings.

Saludos.

Cita:

Empezado por Casimiro Notevi (Mensaje 452050)
Nada, a ver si este año se porta bien algún alma caritativa y nos regala una :rolleyes:

Bién sabés que tus pedidos son órdenes: :)


Cristhor1982 18-12-2012 20:43:14

Cita:

Empezado por nlsgarcia (Mensaje 452053)
Cristhor1982,

El problema es que estas tratando de accesar una posición de memoria no asignada a una lista, por ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
   StrList : TStringList;
begin
   StrList := TStringList.Create;
   for i:= 0 to 9 do
      StrList.Add(IntToStr(i));

   for i := 0 to 10 do
      ShowMessage(StrList.Strings[i]);
end;
En el código anterior se asignan 10 elementos (0 al 9) a una variable tipo TStringList y luego se trata de leer 11 elementos (0 al 10), lo cual produce el error List index out of bounds (10), el valor entre paréntesis (En este caso 10) es la posición de memoria que esta fuera de los límites asignados a la lista (Posición 11), lo cual es lógico dado que la lista solo tiene 10 elementos. La forma correcta de accesar la lista es dentro de los límites de la misma, por ejemplo:
Código Delphi [-]
   for i := 0 to StrList.Count-1 do
      ShowMessage(StrList.Strings[i]);
Igualmente si tratáramos de asignar un valor negativo al índice de la lista, por ejemplo -1, nos daría el error List index out of bounds (-1) por las mismas razones comentadas anteriormente.

Espero sea útil :)

Nelson.

Muchas Gracias, de gran ayuda...ya lo solucione

Casimiro Notevi 18-12-2012 21:13:06

Cita:

Empezado por ecfisa (Mensaje 452055)
Bién sabés que tus pedidos son órdenes: :)

Bien, estupendo, entonces voy a preparar la lista... :)

ecfisa 18-12-2012 21:20:15

Cita:

Empezado por Casimiro Notevi (Mensaje 452072)
Bien, estupendo, entonces voy a preparar la lista... :)

¡ glup ! Yo si que no sé cuando dejar quietos los dedos... :( :D

Saludos. .)

Casimiro Notevi 18-12-2012 21:48:45

Tranquilo, serán son sólo dos o tres... páginas :D

Faust 19-12-2012 16:10:00

Cita:

Empezado por Casimiro Notevi (Mensaje 452075)
Tranquilo, serán son sólo dos o tres... páginas :D

De una página tamaño rotafolio y por ambos lados y a varias columnas :D :D :D

Casimiro Notevi 19-12-2012 16:49:54

Cita:

Empezado por Faust (Mensaje 452125)
De una página tamaño rotafolio y por ambos lados y a varias columnas :D :D :D

¿Cómo lo sabes?, ¿también tienes una bola de cristal? :)

Faust 20-12-2012 00:04:01

Cita:

Empezado por Casimiro Notevi (Mensaje 452132)
¿Cómo lo sabes?, ¿también tienes una bola de cristal? :)

SI, recién estrenándola ;) :D :D :D


La franja horaria es GMT +2. Ahora son las 18:06:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi