[BulmaGés]Bug en bulmacont (II)
Leopold Palomo-Avellaneda
leo en alaxarxa.net
Mar Ene 29 10:18:02 CET 2008
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
Más información sobre la lista de distribución BulmaGes