Error "double free or corruption"

Re: Error "double free or corruption"

de Federico Andrade -
Número de respuestas: 0
Hola Baltasar,
En primer lugar me parece muy bueno esto que haces de no solo resuelvas los ejercicios, sino también que los pruebes como hiciste :)
Sobre la lógica del código, parece correcto. Lo que puede estar pasando es o bien que el último aux3->sig no está bien inicializado y no apunta a NULL o bien que luego del delete del primero, el anterior queda apuntando a basura. Lo que se recomienda es que tras un delete, las refrencias que apuntaban a dicho nodo queden consistentes a la representación, principalmente si eso se va a seguir usando.
Nuevamente, sobre la lógica, si bien parece correcta, tenés una doble iteración cuando lo podrías resolver con una sola. Los while anidados hacen que la lista se recorra dos veces (no completa porque se van eliminando elementos en cada paso), pero podrías hacerlo un poco más eficiente con una única recorrida, el pseudocódigo sería:

- while aux ->sig distino de NULL (me fijo si no estoy en el último nodo)
-- nodo_a_eliminar = aux->sig (con un puntero auxiliar apunto al próximo nodo)
-- aux->sig = nodo_a_eliminar->sig (hago que el siguiente de aux sea el siguiente del siguiente - perdón por el trabalenguas. Eso hace que el nodo que se va a borrar quede "desenganchado" de la lista)
-- delete nodo_a_eliminar (elimino el nodo que quería eliminar)

Saludos