El problema que tengo creo que está en la función "inicia". Es como si no hiciese nada. Lo que tengo entendido que hace esta función, es crear una clase en la dirección de memoria que le señala el puntero ¿no? pero al salir de la función es como si no hubiese hecho nada. Se supone que si trabaja en una dirección de memoria, si que se queda guardado ¿no? :S
El caso es que solo pasa con esa función. si lo inicio en el main directamente, no hay ningún problema.
- Código: Seleccionar todo
#include <iostream>
using namespace std;
class nodo {
public:
nodo() {
siguiente = NULL;
}
int valor;
nodo *siguiente;
};
void inicia(nodo *n, int x) {
n = new nodo();
n->valor = x;
cerr << "c0:" << n->valor;
}
void apilar(nodo *n, int x) {
if (n == NULL) inicia(n, x);
else {
nodo *i;
i = n;
while (i->siguiente) i = i->siguiente;
nodo *aux;
aux = new nodo();
aux->valor = x;
i->siguiente = aux;
}
cerr << "c1:" << n->valor;
}
void elimina(nodo *n) {
nodo *i;
i = n;
while (i) {
nodo *aux;
aux = i;
i = i->siguiente;
delete aux;
}
}
void escribe(nodo *n) {
cout << endl;
nodo *i;
i = n;
while (i) {
cout << i->valor << ' ';
i = i->siguiente;
}
cout << endl;
}
int main() {
nodo *lista;
lista = NULL;
//lista = new nodo(); se se descomenta esto,
//lista->valor = 5; funciona bien.
int n;
while (cin >> n) {
apilar(lista, n);
cerr << "c2:" << lista->valor;
}
escribe(lista);
elimina(lista);
}
¿Mis suposiciones son ciertas? ¿Por qué falla?
Me he ido guiando con un documento de la web c con clase pero no quiero complicarme tanto.
Saludos y gracias de antemano.