Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
desbordamiento de pila

Hola, tengo un error de stack overflow, en el siguiente código:
Código Delphi [-]
procedure TForm1.Button7Click(Sender: TObject);
var
  i, j: integer;

begin
    timer1.Enabled:= true;
    button5.Enabled:= false;
    button2.Enabled:= false;
    button3.Enabled:= false;
    button4.Enabled:= false;
    comb.Enabled:= false;
    for i:= 0 to lista.Items.Count -1 do
      for j:= 0 to listBox1.Items.Count -1 do
      begin
          barra2.Max:= listBox1.Items.Count;
          barra2.Position:= j;
          label10.Caption:= (IntToStr((i)+1))+' de '+IntToStr(lista.Items.Count);
          label12.Caption:= (IntToStr((j)+1))+' de '+ IntToStr(listBox1.Items.Count);
          //edit7.Text:= listBox1.Items.Strings[j];
          if lista.Items.Item[i].SubItems[0] +
            ' '+ lista.Items.Item[i].SubItems[1]+' '+lista.Items.Item[i].SubItems[2]+
            ' '+ lista.Items.Item[i].SubItems[3] +' '+lista.Items.Item[i].SubItems[4] +
            ' '+ lista.Items.Item[i].SubItems[5] = listBox1.Items.Strings[j] then
            begin
              showmessage('encontrado en la fila '+IntToStr(i)+' de la lista inical');
              lista.Selected:= lista.Items[i];
            end;
            label17.Caption:= FormatFloat('0.00',(i*100)/lista.items.Count)+'%';
      end;

      showmessage('Proceso terminado. No se encontraron coincidencias.');
      if label10.Caption = IntToStr(lista.Items.Count)then
      timer1.Enabled:= false;
      lista.Selected:= lista.Items[i];
end;

Pero si cambio listBox1.Items.Strings[j] por listBox1.Items.Text el error no se produce, aunque claro, tampoco estoy seguro de que se recorra correctamente todo el listbox. A parte, que usando .string[j] se reduce enormemente el tiempo que emplea en recorrer y comparar cada linea de listbox con cada linea del listview.

¿Alguna sugerencia? saludos.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #2  
Antiguo 30-10-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Facil, en edit7.Text:= listBox1.Items.Strings[j]; estas accediendo a un indice que es mayor a edit7.Text:= listBox1.Items.Count
Responder Con Cita
  #3  
Antiguo 30-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola agustin,
gracias por responder, pero esa linea del edit7.text... es un comentario, vamos que en la practica debe saltarla ¿no? si la salta no creo que sea esa la causa del error.


edit: Encontre esta información y estoy probando http://docwiki.embarcadero.com/RADSt..._sizes_(Delphi)

saludos.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.

Última edición por danielmj fecha: 30-10-2016 a las 10:26:12.
Responder Con Cita
  #4  
Antiguo 30-10-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Ah, crei que la habias comentado porque esa era la linea que producia el error

Por lo general en ese tipo de algoritmos en donde usas mucho los indices el problema esta ahi; tenes una lista o coleccion de lo que sea, de tamaño N y estas accediendo a una posicion que esta fuera del rango 0..N-1.

Ademas, dijiste

Cita:
Pero si cambio listBox1.Items.Strings[j] por listBox1.Items.Text el error no se produce
Por eso le apunte a esa linea

En que linea exactamente te da el error? Si te manda a una parte "rara" de codigo delphi, podes ir depurando tu codigo linea por linea y ver "hasta donde llega"

Que clase de excepcion obtienes? EStackOverflow?
Responder Con Cita
  #5  
Antiguo 30-10-2016
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola agustin,

si, era stack overflow, el error es algo raro, por que me he dado cuenta que corriendo la aplicacion con la ventana minimizada (sin verse en el escritorio) el error NO se produce. Esta tarde he estado migrando todo de delphi 7 a delphi xe7 (donde inicie la aplicacion inicialmente) y la he construido para 64bit y tampoco salta el error. Pero ya digo, en d7 con la ventana del programa en modo normal, el error salta y no siempre en el mismo valor,, quiero decir...

la I recorre un listview de por ejemplo 1000 lineas y la J un listbox de 720 (este es un valor fijo) pues a veces el error salta cuando va por la linea 124 del listview y otras cuando va por la linea 673 del mismo listview. Insisto, con la aplicacion minimizada no tira errores. Ahora mismo esta funcionando para 64bit (compilada en xe7) y minimizada junto al reloj y va bien.
Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Desbordamiento de pila ecfisa OOP 2 06-12-2007 16:08:35
problemas con la pila! nuevo en el foro raider_206 Varios 1 29-08-2007 14:55:51
Palindrome con pila de usuario Armando25 JAVA 5 07-08-2007 11:47:53
Desbordamiento de Pila Durbed Conexión con bases de datos 5 21-06-2006 20:05:31
PageControl me produce desbordamiento de pila apicito OOP 1 24-09-2003 17:07:55


La franja horaria es GMT +2. Ahora son las 13:48:01.


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
Copyright 1996-2007 Club Delphi