[BulmaGés]Bug en bulmacont (II)

Ricardo Díaz de la Calle richard en galdi.es
Mar Ene 29 10:43:20 CET 2008


Hola:

Creo que soy el más indicado para revisar esta clase, pero últimamente no 
dispongo de tiempo para nada y menos para machacarme con el código. 
No obstante, como es algo que me encanta, voy a ver si a partir de mañana 
puedo sacar algo de tiempo para dedicárselo a bulmacont y, en especial, a la 
clase árbol.
Espero poder ayudarte pronto Leo.

Salu2,
Richard.

El Martes 29 Enero 2008, Leopold Palomo-Avellaneda escribió:
> Añadir,
>
> que aunque ahora me ha funcionado una vez, vuelve a petar el programa en
> esta función. Pero ahora peta en el destructor del árbol. Por favor,
> quisiera que alguien lo revisara.
>
> Leo
>
> A Dimarts 29 Gener 2008, Leopold Palomo Avellaneda va escriure:
> > Bones,
> >
> > haciendo mas pruebas hemos descubierto que si intentas hacer un balance
> > en bulmacont peta de forma contundente. Haciendo un bt me encuentro que:
> >
> > #0  0x00002b04fb1d5713 in QString::operator== () from
> > /usr/lib/libQtCore.so.4 #1  0x000000000046e4ab in QString::operator!= ()
> > #2  0x000000000046c2fc in Arbol::actualizahojas ()
> > #3  0x000000000055a964 in BalanceView::presentarSyS ()
> > #4  0x000000000055c87c in BalanceView::presentar ()
> > #5  0x000000000055ca0f in BalanceView::accept ()
> >
> >
> > y mirando el código de la función: bulmacont/src/arbol.cpp
> >
> > void Arbol::actualizahojas ( cursor2 *cuenta )
> > {
> >     _depura ( "Arbol::actualizahojas", 0 );
> >     unsigned int i = 0;
> >     bool actualizado;
> >     tipohoja *hojaraiz;
> >
> >     QString cuentapadre = cuenta->valor ( "codigo" ).left ( 2 );
> >     do {
> >         hojaraiz = raiz[i];
> >         i++;
> >     } while ( i < 70 && cuentapadre != hojaraiz->codigo );
> >     actualizado = false;
> >
> > el error está en el while. Nadie te garantiza que primero compare que y
> > sea menor qie 70 y luego que cuentapadre != hojaraiz->codigo. Puede pasar
> > que se intente acceder a hojaraiz->codigo con el índice i=70 i claro,
> > peta.
> >
> > La solución subida es:
> > ....
> >  bool actualizado, condition = true;
> > .....
> > do {
> >         hojaraiz = raiz[i];
> >         if(i <70)
> >           i++;
> >         else
> >           condition = false;
> >         if(condition)
> >           if(cuentapadre != hojaraiz->codigo)
> >             condition = false;
> >     } while ( condition );
> >
> >
> > Leo
>
> _______________________________________________
> BulmaGes mailing list
> BulmaGes en bulma.net
> http://llistes.bulma.net/mailman/listinfo/bulmages
> Home: http://www.iglues.org
> Wiki: http://www.iglues.org/wiki
> Bugs: http://www.iglues.org/bugzilla



-- 
Ricardo Díaz.


Más información sobre la lista de distribución BulmaGes