Normas del foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Noviembre 18, 2008, 04:15:40
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Necesito esta ayuda por favor urgente!!! 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Necesito esta ayuda por favor urgente!!!  (Leído 301 veces)
Lord Gandalf
Visitante
« en: Diciembre 27, 2005, 09:45:08 »

Desde ya contando con la generosidad de ustedes necesito la siguiente ayuda, nesito decifrar que hace este codigo? y lo mas importante, cuantos bugs puedes encontrar?, mi amigo me dijo que es para un mix de listas, pero necesito saber cuando bugs tienen, es un trabajo y necesito urgente, desde muchas gracias ..

struct _tagElement
{
int m_cRef;
unsigned char m_bData[20];
struct _tagElement * m_next;

} NODE, * PNODE;

PNODE DoesWhat (PNODE pn1, PNODE pn2)
{
PNODE * ppnV = &pn1;
PNODE * ppn1 = &pn1;
PNODE * ppn2 = &pn2;

for ( ; *ppn1 || *ppn2; ppn1 = &((*ppn1)->m_next))
{
if (!(*ppn1) || (0 < memcmp((*ppn1)->m_bData, (*ppn2)->m_bData, sizeof((*ppn2)->m_bData))))
{
PNODE pn = *ppn1;
*ppn1 = *ppn2;
pn2 = (*ppn2)->m_next;
(*ppn1)->m_next = pn;
}
}
return *ppnV;
}
En línea
galford_bust
Visitante
« Respuesta #1 en: Diciembre 27, 2005, 06:26:24 »

En línea
Lord Gandalf
Visitante
« Respuesta #2 en: Enero 02, 2006, 11:23:05 »

miren, encontre estos bugs:

BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS
BUG0: if (!(*ppn1) || (0 < memcmp((*ppn1)->m_bData, (*ppn2)->m_bData, sizeof((*ppn2)->m_bData)))) este condicional evalua T independientemente del resultado de memcmp; en C++ el OR se evalua en short circuit; debido a que en una expresion logica con OR basta que una de las expresiones sea T para evaluar toda la sentencia a T la comparacion no ocurre jamas y se procede a la insercion independientemente del valor de orden de los buffers.

BUG1: for ( ; *ppn1 || *ppn2; ppn1 = &((*ppn1)->m_next)) en esta sentencia quiero llamar la atencion a la condicional "*ppn1 || *ppn2" es una condicional OR; por lo tanto basta con que *ppn1 o *ppn2 evalue a un valor distinto de NULL para que la accion del ciclo se realice; pues bien, que ocurre cuando *ppn1 es NULL y *ppn2 no lo es? se produce un AV (access violation) en ppn1 = &((*ppn1)->m_next)

BUG2: if (!(*ppn1) || (0 < memcmp((*ppn1)->m_bData, (*ppn2)->m_bData, sizeof((*ppn2)->m_bData)))) si *ppn1 apunta a NULL el hecho de que el primer miembro de la condicional evalue a F no impide que el segundo miembro sea evaluado lo que lleva a un AV en memcmp((*ppn1)->m_bData, (*ppn2)->m_bData, sizeof((*ppn2)->m_bData))

BUG3: si pn2 es una lista vacia se produce un AV en pn2 = (*ppn2)->m_next; puesto pn1 es vacia y if (!(*ppn1) || (0 < memcmp((*ppn1)->m_bData, (*ppn2)->m_bData, sizeof((*ppn2)->m_bData)))) evalua a T.

BUG4: si pn2 tiene solo elementos mas grandes que el maximo elemento de pn2 no se inserta ningun elemento de pn2 y la lista retornada como resultado es solo pn1

BUG5: *ppnv no es necesaria puesto que pn1 solo se actualiza cuando se inserta al principio de la lista.

Como se resuelven estos problemas?Huh y hay otros bugs? .. alguien me puede ayudar con esto? ...

En línea
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Necesito esta ayuda por favor urgente!!! « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.7 | SMF © 2006-2007, Simple Machines LLC