vbalsamo / 2020_K2002_Grupo_4

Grupo 4
0 stars 0 forks source link

Error en tiempo de ejecución. #2

Open ivanscardaoni1 opened 4 years ago

ivanscardaoni1 commented 4 years ago
Cuando quiere hacer el strcmp tira error porque ptrPila esta en NULL, y después de un par de pruebas nos dimos cuenta que era el algoritmo de pila que hicimos,  que ni siquiera hace el PUSH del primer signo $ que le mandamos antes de todo al algoritmo. Queriamos saber que es lo que esta mal en el algoritmo de pila. Estamos suponiendo que toda la lógica del programa esta correcta. Pero tenemos ese problema que no nos deja probarlo.

Esta en 2020_K2002_Grupo_4/TP2.c/main.c

@santiagoferreiros

santiagoferreiros commented 4 years ago

Ivan

Hay dos MAIN

MAIN.C

MAIN2.C

Cuál de los dos miro?

ivanscardaoni1 commented 4 years ago

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.

santiagoferreiros commented 4 years ago

Ivan,

El problema yo lo veo acá

image

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

santiagoferreiros commented 4 years ago

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.

ivanscardaoni1 commented 4 years ago
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. 
ivanscardaoni1 commented 4 years ago

Esta commiteado el nuevo

santiagoferreiros commented 4 years ago

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

include

include

include

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);

}

image

Te va a dar la siguiente salida

image

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