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