[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