Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con programita en C

Estas en el tema de Problema con programita en C en el foro de C/C++ en Foros del Web. Hola, tengo que hacer un tda pila con una lista simplemente enlazada y cuando ejecuto este tester : int main() { tPila p; crearpilanueva(&p); apilar(1,&p); ...
  #1 (permalink)  
Antiguo 16/02/2013, 12:13
 
Fecha de Ingreso: febrero-2013
Mensajes: 3
Antigüedad: 11 años, 2 meses
Puntos: 0
Problema con programita en C

Hola, tengo que hacer un tda pila con una lista simplemente enlazada y cuando ejecuto este tester :
int main()
{
tPila p;
crearpilanueva(&p);
apilar(1,&p);
apilar(2,&p);
apilar(5,&p);
mostrarPila(p);


return 0;
}

me funciona bien pero si mando algun prinf en el medio o cualquier cosa me deja de andar y no entiendo porque :S

aca les dejo parte del tdapila


typedef struct Pila{
int elem;
struct Pila* next;
}*tPila;


crearpilanueva(tPila* p) {
*p= (tPila) malloc(sizeof(struct Pila));
(*p)->next=NULL;
(*p)->elem=NULL;
}

int estavacia(tPila P) {
int res=0;
if (P->elem==NULL) {
res=1;
}
return res;
}

void apilar (int a, tPila* p){
tPila* nueva;
crearpilanueva(nueva);
(*nueva)->elem= a;
(*nueva)->next= (*p);
(*p)=(*nueva);
}

void mostrarPila(tPila p) {
tPila aux=p;
while (aux->elem!=NULL) {
printf(" el elemento es :%i \n", aux->elem);
aux= aux->next;
}
}
  #2 (permalink)  
Antiguo 16/02/2013, 13:43
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema con programita en C

Cita:
me funciona bien
mmmm esto no deberia andar, o al menos eso creo. El problema es al declarar la variable nueva en la funcion apilar, esta variable es de tipo puntero a puntero cuando deberia ser solo puntero. Al ser puntero a puntero no podes acceder a *p para reservar memoria


Saludos
  #3 (permalink)  
Antiguo 16/02/2013, 14:49
 
Fecha de Ingreso: febrero-2013
Mensajes: 3
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Problema con programita en C

pero como hago para usar el crearpilanueva() si no uso puntero a puntero ?
  #4 (permalink)  
Antiguo 18/02/2013, 12:49
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema con programita en C

Cita:
pero como hago para usar el crearpilanueva() si no uso puntero a puntero ?
me explique mal, sí tenes que usar un puntero a puntero pero no declarar nueva como puntero a puntero. Lo que tenes que pasar es la direccion de nueva a la funcion, osea:
Código C:
Ver original
  1. tPila* nueva;
  2. crearpilanueva(&nueva); // paso la direccion
Al pasar la direccion, la funcion crearpilanueva lo recibe como un puntero a puntero(sin necesidad de cambiar nada)


Saludos

Etiquetas: funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:14.