Ver Mensaje Individual
  #11 (permalink)  
Antiguo 21/04/2013, 12:51
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Error con clase de listas enlazadas.

"...Muchas gracias por las molestias que te estas tomando..."

De nada hombre, estamos a domingo por la tarde y no tengo nada mejor que hacer :)

Personalmente separaría la funcion de reserva de memoria por si fuese necesario implementar la opcion de ampliar la lista, y sobretodo haz comprovaciones de error. Pongo el ejemplo de como haría el constructor (es una forma de las mil que hay)

Código:
Lista :: Lista (int nnodos) {
    if(reserva(nnodos) != nnodos) {
	//condicion de error
    }
    numnodos += nnodos;
}
	
int Lista::reserva(int nnodos) {
    Nodo *nuevo, *anterior;
    int reservados = 0;
 
    anterior = p;
    for(int i=0; i<nnodos; i++) {

        nuevo = new (nothrow) Nodo;
        if(!nuevo) {
	    break;
	}
        	
        nuevo->valor = 0;
        nuevo->siguiente = 0;
        	
        if(anterior) {
	    anterior->siguiente = nuevo;
	}
        else {
	    p = nuevo;
	}

	anterior = nuevo;
        reservados++;
    }
    	
    return reservados;
}
Y el destructor tal como te comenté: para cada new necesitas un delete

Código:
Lista::~Lista() {
    Nodo *ptr, *sig;
 
    ptr = p;
    while(ptr) {
        sig = ptr->siguiente;
	delete ptr;
	ptr = sig;
    }
    numnodos = 0;
    p = 0;
}
Saludos
vosk