Open ivanscardaoni1 opened 4 years ago
Ivan
Hay dos MAIN
MAIN.C
MAIN2.C
Cuál de los dos miro?
El main.c es el que tiene el problema, perdon por no aclarar!
El 9 jun. 2020, a la(s) 19:56, Santiago Ferreiros Cabrera notifications@github.com escribió:
Ivan
Hay dos MAIN
MAIN.C
MAIN2.C
Cuál de los dos miro?
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
Ivan,
El problema yo lo veo acá
Definieron a dato PUNTERO A CHAR y a la vez como ARREGLO DE CHAR DE [3].
Char* Dato[3];
Estarían teniendo un puntero que apunta a un arreglo de 3 elementos. Y eso no es correcto, cada elemento de la pila es un CHAR.
Yo les aconsejo que lo definan como CHAR a dato,
La pila tiene en casa posición un único caracter.
Si insertan más de un caracter en la pila tienen que hacer DOS PUSH.
Primero ponen un caracter (pidiendo memoria para dicho nodo) Y después ponen el otro (pidiendo memoria para el otro nodo) Y en cada elemento de la pila un CHAR
Se entiende?
No hace falta usar el STRCPY
Saludos
Perdón quise decir que tienen un arreglo de 3 punteros a char. cuando definen char* data[3];
Están definiendo un arreglo de 3 elementos de punteros a char.
Ahi lo corregí, sigue tirando el mismo error, como que en tiempo de ejecución ptrPila esta en NULL, incluso después del push del primer '$', entonces me tira el error cuando quiere acceder al campo dato.
Esta commiteado el nuevo
Ivan,
Ya encontré su inconveniente. Deben definir el puntero a la pila como una variable global. Cuando la pasan como un parámetro en la invocación de las funciones push y pop se está creando una copia del puntero a la pila. Entonces, lo que sucede luego de retornar a la función main principal es que la variable que definieron sigue apuntando a NULL.
Lo que deberían hacer es declararla como una variable global y utilizarla desde las funciones sin necesidad de pasar parámetro. La otra alternativa es usar puntero de puntero **
Mira, agarré su código y probé lo siguiente
struct nodo { char dato; struct nodo *siguiente; };
struct nodo *PilaGlobal = NULL;
int main(){
//PRIMER PUSH
struct nodo *nuevoNodo = malloc(sizeof(struct nodo));
nuevoNodo -> dato = 'a';
nuevoNodo -> siguiente = PilaGlobal;
PilaGlobal = nuevoNodo;
//SEGUNDO PUSH
nuevoNodo = malloc(sizeof(struct nodo));
nuevoNodo -> dato = 'b';
nuevoNodo -> siguiente = PilaGlobal;
PilaGlobal = nuevoNodo;
//IMPRIMIMOS LA CIMA
printf("La cima de la pila contiene %c \n",PilaGlobal->dato);
//HACEMOS UN POP
if (PilaGlobal != NULL){
struct nodo* temporal = PilaGlobal;
PilaGlobal = PilaGlobal->siguiente;
free(temporal); }
//VOLVEMOS A IMPRIMIR LA CIMA
printf("La cima de la pila continee %c \n",PilaGlobal->dato);
}
Te va a dar la siguiente salida
Ese código funciona perfecto, porque lo estoy ejecutando todo sobre el main, entonces no está creando una copia del puntero a la pila.
Bueno, el resto del código lo vi muy bien, REVISEN LA TT que creo que hay algunos casos que le está faltando hacer un PUSH con más de una R. Revisen , quizás me equivoco porque lo están implementando de otra manera.
Saludos
Santiago
Esta en 2020_K2002_Grupo_4/TP2.c/main.c
@santiagoferreiros