Buenos días,
Si no me equivoco, la función check_neighbors_alive:
* nunca elimina al primer vecino de la lista, y
* cada vez que elimina un vecino, saltea al siguiente (no lo actualiza ni lo elimina).
Saludos,
-Jero
En respuesta a Jerónimo Ismael Acosta Monteavaro
Re: Problema con check_neighbors_alive
de Matias Richart -
Hola Jerónimo,
La estructura está pensada como una lista con un primer elemento "dummy".
Si ves, en la función de inicialización del router, se crea con un primer elemento 'zero'.
Entonces, tanto en el chequeo como en el borrado, se tiene esto en cuenta y se mira uno para adelante en la búsqueda y al borrar se pasa el puntero al nodo anterior a borrar.
Si seguís viendo un problema luego de esta aclaración avisame y vuelvo a revisar el código.
Saludos
La estructura está pensada como una lista con un primer elemento "dummy".
Si ves, en la función de inicialización del router, se crea con un primer elemento 'zero'.
Entonces, tanto en el chequeo como en el borrado, se tiene esto en cuenta y se mira uno para adelante en la búsqueda y al borrar se pasa el puntero al nodo anterior a borrar.
Si seguís viendo un problema luego de esta aclaración avisame y vuelvo a revisar el código.
Saludos
En respuesta a Matias Richart
Re: Problema con check_neighbors_alive
Hola profe,
No consideré ese vecino dummy. Mi primer punto no es correcto.
Respecto al salteo de vecinos, creo que sí sucede.
Supongamos que se invoca check_neighbors_alive con la siguiente lista de vecinos:
Dummy -> A -> B -> NULL
Supongamos además que A y B deben ser eliminados.
La primera iteración del while en la función eliminará al vecino A mediante delete_neighbor, dejando a la lista así:
Dummy -> B -> NULL
En la siguiente iteración, ptr avanza a ptr->next:
Dummy -> B -> NULL
Entonces, se verifica que ptr->next == NULL, y la función retorna sin eliminar al vecino B como debería.
Saludos
No consideré ese vecino dummy. Mi primer punto no es correcto.
Respecto al salteo de vecinos, creo que sí sucede.
Supongamos que se invoca check_neighbors_alive con la siguiente lista de vecinos:
Dummy -> A -> B -> NULL
Supongamos además que A y B deben ser eliminados.
La primera iteración del while en la función eliminará al vecino A mediante delete_neighbor, dejando a la lista así:
Dummy -> B -> NULL
En la siguiente iteración, ptr avanza a ptr->next:
Dummy -> B -> NULL
Entonces, se verifica que ptr->next == NULL, y la función retorna sin eliminar al vecino B como debería.
Saludos
En respuesta a Jerónimo Ismael Acosta Monteavaro
Re: Problema con check_neighbors_alive
de Matias Richart -
Hola Jerónimo,
Si, estás en lo correcto, hay un problema ahí.
Lo corregiremos a la brevedad.
Gracias por el aviso!
Si, estás en lo correcto, hay un problema ahí.
Lo corregiremos a la brevedad.
Gracias por el aviso!