Buenos días.
Lo primero, revisa las normas del foro... el código hay que decorarlo con la etiqueta que corresponda... elige el lenguaje en cuestión en el desplegable "Highlight" y pon el código dentro de las etiquetas.
Y ahora, tratando tu problema, empezamos con un consejo. En la siguiente función:
Código C:
Ver originalPila *creaPila(){
Pila
*nvo
=(Pila
*)malloc(sizeof(Pila
)); nvo->cab=NULL;
return nvo;
}
Puedes conseguir lo mismito haciendo:
Código C:
Ver originalPila *creaPila(){
Pila
*nvo
=(Pila
*)calloc(1, sizeof(Pila
)); return nvo;
}
calloc es una función un poco más completa que
malloc ya que además de reservar la memoria, inicializa la memoria reservada a 0, con lo que
nvo->cab acabará apuntando a
NULL sin tener que hacer nada más.
¿Por qué usar
calloc en vez de
malloc? porque si, en el futuro, añades nuevos punteros a la estructura,
calloc se encargará de resetear toda la memoria, mientras que si usas malloc tendrás que acordarte de actualizar esta función a mano.
Luego comentas que no se añaden los elementos a la pila. Deberías hacer caso de los warning que te salen en el código. Veamos:
cad es un puntero, luego ese & sobra. Lo que estás escribiendo ya te digo yo que no va a dónde tu esperas que vaya.
Código C:
Ver originalstruct nodoL{
void **dato;
struct nodoL *sig;
};
NodoL *creaNodoL(void *dato, NodoL *cab){
nvo->dato=dato; // <<--- puntero doble = puntero???
}
Aquí tenemos el ejemplo contrario... por qué
dato es un puntero doble? Si tiene que ser un puntero doble no le puedes asignar un puntero simple así por las buenas.
Y para terminar....
Código C:
Ver originalvoid *pop(Pila *p){
eliminaIni(&(p->cab));
}
pop retorna un
void*, luego ahí falta un return... o sobra el asterisco.
Deberías revisar el tema del doble puntero, ya que la solución cambia dependiendo de si
nodoL->dato es un puntero doble o no.
Un saludo