el problema es analogo al de una funcion que retorna un entero en la
lista de parametros. si haces

void funcion(int i) {
   i = 2;
}

y llamas a la funcion, obviamente que el valor que le asignaste al int
se pierde. entonces para devolverlo usas un puntero a int

void funcion(int *i) {
   *i = 2;
}

tu caso es igual pero con un nivel mas de indireccion. vos queres
devolver un puntero a int, por lo tanto a la funcion tenes que pasarle
un puntero al tipo de dato (puntero a puntero a int). sino no vas a
ver desde afuera todas las modificaciones que hiciste dentro de la
funcion.

saludos

2008/3/17 Carlos Pantelides <[EMAIL PROTECTED]>:
> Juanii:
>
>  Muchas gracias por tu pronta respuesta. Aunque todavia
>  no comprendo muy bien como, lo he hecho funcionar
>  satisfactoriamente. Quiero decir que sería incapaz de
>  reproducir la sintaxis.
>
>  Con respecto a los int a,b y c en el stack, eso si lo
>  entiendo bien, lo hice asi solo para probar el stack.
>
>  Carlos
>
>
>
>  --- juanii <[EMAIL PROTECTED]> wrote:
>
>  > el problema es que al pop tendrias que pasarle un
>  > void **value y donde
>  > se asigna su valor, poner *value = top_node->value.
>  > esto se da porque estas pasando el puntero por
>  > valor, lo cambias
>  > dentro de la funcion, pero al salir de la funcion el
>  > valor se pierde.
>  >
>  > hay otra cuestion mas sutil que es que en tu stack
>  > estas guardando
>  > punteros a enteros que estan almacenados... en el
>  > stack. aca no te
>  > causa problemas porque la misma funcion (el main) en
>  > la que pusheas
>  > haces el pop, pero por ejemplo si llamaras a una
>  > funcion que apila los
>  > valores y despues llamas a otra que los desapila
>  > seguramente vas a
>  > obtener un feo error. esto es asi porque al salir de
>  > la primer funcion
>  > el stack donde se guardaban las variables locales
>  > (los int) pasa a ser
>  > memoria de nadie, que se reutiliza cada vez que
>  > llamas a otra funcion.
>  > por ende, cuando desapiles tus valores, seguramente
>  > va a haber _otra_
>  > cosa (si es que tenes suerte y no se cuelga antes).
>  > lo que tendrias
>  > que hacer es reservar memoria con malloc() para los
>  > ints y guardar
>  > esos punteros para finalmente liberar con free()
>  > cuando los desapilas.
>  >
>  > saludos
>
>
>
>
>       
> ____________________________________________________________________________________
>  Looking for last minute shopping deals?
>  Find them fast with Yahoo! Search.  
> http://tools.search.yahoo.com/newsearch/category.php?category=shopping
>
>
> _______________________________________________
>  Lista de correo Programacion.
>  [email protected]
>  http://listas.fi.uba.ar/mailman/listinfo/programacion
>



-- 
juanii

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a