PDA

Ver la Versión Completa : List Index out of bounds()


Cristhor1982
18-12-2012, 13:09:29
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
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
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:

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:

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
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
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.

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: :)

http://img713.imageshack.us/img713/9061/bolaf.gif

Cristhor1982
18-12-2012, 20:43:14
Cristhor1982,

El problema es que estas tratando de accesar una posición de memoria no asignada a una lista, por ejemplo:

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:

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
Bién sabés que tus pedidos son órdenes: :)

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

ecfisa
18-12-2012, 21:20:15
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
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
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
¿Cómo lo sabes?, ¿también tienes una bola de cristal? :)

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