[C con Clase] error lista simple

Salvador Pozo salvador en conclase.net
Mar Sep 9 10:14:03 CEST 2008


El pasado 2008-09-08 20:28:09, batista escribió:
 
Hola:

b> valla ahora ke lo dices tienes razon no eh loberado esa memoria. y haciendo
b> la funcion ya me dio un error de ejecucion.
b> mira mi funcion

Se trata de un error al manejar un puntero.

b>     {
b>         delete[] primera;
b>         primera = primera->sig;
b>     }delete[] ultimo; //como el bucle no llega al ultimo elemento lo borro

En primer lugar, liberas la memoria correspondiente al nodo apuntado por "primera", y después pretendes actualizar el valor de "primera" con "primera->sig". Sin embargo, el nodo apuntado por "primera" ya no existe como tal. Aunque la memoria no haya sido destruida (sólo liberada), el valor de "primera" después de liberar el puntero no se mantiene, por lo que es imposible acceder al valor que contenía el nodo.

Pero aunque conservases el valor de "primera" en otro nodo, y después lo liberases, tampoco es una buena idea acceder a una zona de memoria que ha sido liberada. En sistemas multitarea no es posible asumir que tu programa es el único que puede modificar el contenido de la memoria. Una zona de memoria liberada puede ser reservada por otro programa antes de que te de tiempo a leerla.

La regla es que si necesitas algún valor del nodo, has de recuperarlo antes de liberar su memoria.

En este caso necesitas un puntero auxiliar que almacene el valor de "primera->sig" antes de liberar la memoria correspondiente al nodo.

b> y sobre la pagina de c.conclase
b> me refiero a la parte dedica a estructura dinamicas de datos
b> no a los primeros capitulos.

Insisto: si cualquier parte de cualquier curso te plantea alguna duda o te parece incompleto o poco claro, sólo tienes que decirlo. Por mi parte estaré encantado de corregir o completar cualquier explicación. No sería la primera vez que sucede, y de hecho, me gusta que los cursos "evolucionen" en función de las dudas y preguntas que se nos plantean en este foro o de cualquier otra forma. Todo puede mejorarse, y personalmente, estoy muy lejos de la perfección... todavía.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase