Lista dinámica

19/11/2003 - 17:06 por Sergio | Informe spam
Alguien sabe decirme porque esta mal esta función de borrado?

void BorrarLista()
{ item actual;
if (comienzo == NULL)
return;
while (comienzo != NULL) {
actual = comienzo;
comienzo = actual->sig;
delete actual;
}
}

Es una sencilla función para borrar una lista dinámica, pero no se porque el
Visual c++ tiene que eliminar datos de memoria cuando cierro el programa que
estoy probando. Al parecer algún elemento de la
lista no se borra del todo de memoria.

Por si el problema viniera de como cargo la lista:

void Agregar(dato n) {
item actual;
item anterior;
item nuevo = new elem;
nuevo->d = n;
if (comienzo == NULL) {
comienzo = nuevo;
nuevo->sig = NULL;
return;
}
for (actual = comienzo;actual->sig != NULL;actual = actual->sig) {
if (actual->d.tiempo > n.tiempo) break;
anterior = actual;
}
if (actual->d.tiempo > n.tiempo) {
if (actual == comienzo) {
nuevo->sig = actual;
comienzo = nuevo;
return;
}
nuevo->sig = anterior->sig;
anterior->sig = nuevo;
return;
}
nuevo->sig = NULL;
actual->sig = nuevo;
}

Todo sea que no venga de aqúí el problema, ya no entendería nada.
 

Leer las respuestas

#1 Esteban
20/11/2003 - 11:09 | Informe spam
Hola,
en la función de borrado no veo nada raro el algoritmo sería así:

void BorrarLista( )
{
item actual;
item aux;
actual = comienzo;
//Mientras no se llegue al final de la lista se recorre y se borra
while (actual != NULL)
{
aux = actual->siguiente;
delete (actual);
actual = aux;
} //final while
}//final funcion BorrarLista( )

En cuanto a la función de agregar la he mirado un poco y no he encontrado
nada raro, de todas formas deberías ordenar un poco el código
poner comentarios y aclarar los terminos, te aseguro que ayuda mucho.
Asegurate entrando en modo debug que se recorre bien toda la lista en el
borrado
no vaya a ser que en el algún punto insertes mal en alguno de los casos al
hacer la ordenación y sea por eso.

"Sergio" escribió en el mensaje
news:
Alguien sabe decirme porque esta mal esta función de borrado?

void BorrarLista()
{ item actual;
if (comienzo == NULL)
return;
while (comienzo != NULL) {
actual = comienzo;
comienzo = actual->sig;
delete actual;
}
}

Es una sencilla función para borrar una lista dinámica, pero no se porque


el
Visual c++ tiene que eliminar datos de memoria cuando cierro el programa


que
estoy probando. Al parecer algún elemento de la
lista no se borra del todo de memoria.

Por si el problema viniera de como cargo la lista:

void Agregar(dato n) {
item actual;
item anterior;
item nuevo = new elem;
nuevo->d = n;
if (comienzo == NULL) {
comienzo = nuevo;
nuevo->sig = NULL;
return;
}
for (actual = comienzo;actual->sig != NULL;actual = actual->sig) {
if (actual->d.tiempo > n.tiempo) break;
anterior = actual;
}
if (actual->d.tiempo > n.tiempo) {
if (actual == comienzo) {
nuevo->sig = actual;
comienzo = nuevo;
return;
}
nuevo->sig = anterior->sig;
anterior->sig = nuevo;
return;
}
nuevo->sig = NULL;
actual->sig = nuevo;
}

Todo sea que no venga de aqúí el problema, ya no entendería nada.


Preguntas similares