elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:23  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Estado de Variables de retorno
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Estado de Variables de retorno  (Leído 508 veces)
RHL


Desconectado Desconectado

Mensajes: 966


mental


Ver Perfil
Estado de Variables de retorno
« en: 17 Enero 2012, 08:30 »

Saludos a todos vengo con una duda, mirad este codigo:

Código:
int* a()
{
int x;
int* p;

x = 10;
p = &x;
return p;


}


int main()
{
int* y;
int z=20;

y = a();

y=&z;
// que pasa con el valor 10?
}

bien, ultimamente me estoy preocupando mucho sobre los recursos y como administran la memoria mis programas y tengo una duda que pasa
con la variable ( valor 10 ) despues de la asignarle un nuevo valor al puntero que la tenia? el compilador borra internamente? osea ese 10, ahora el compilador sabe que esta libre para asignar algo en ese espacio de memoria? o la variable queda perdida en ese espacio? y si es asi como se haria entonces en ese caso para evitar eso?
de ante mano gracias :)


En línea
Xandrete

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Estado de Variables de retorno
« Respuesta #1 en: 17 Enero 2012, 11:48 »

Bueno, primero una cosa. Lo que pretendes hacer en a() no se hace así. Cuando declaras la variable x, su ámbito de visibilidad se limita a la función donde la declaras. Aun en el caso de que funcionara, no es la manera correcta de llevarlo a cabo.

Para hacer algo como lo que quieres hacer, se utiliza:

Código
int* p = new int; // si estas en C++
Código
int *p = malloc(sizeof(int)); /* Si estas en C*/

Por lo demás, ¿qué pasa con el valor 10? No pasa absolutamente nada. Se queda por ahí, en algún lugar de la memoria, solo y abandonado sin que nadie pueda acceder a él Y_Y. ¿No te da penita? No se puede liberar la memoria ocupada por el 10 hasta que finalice el programa.

En fin, cuando ya no necesites más la memoria reservada, haces:

Código
delete p;
Código
free(p);

Se puede implementar un recolector de basura automático, como en Python. Aquí hay un ejemplo.


En línea
RHL


Desconectado Desconectado

Mensajes: 966


mental


Ver Perfil
Re: Estado de Variables de retorno
« Respuesta #2 en: 20 Enero 2012, 04:50 »

bien! gracias entonces pero y?
declarar todas las variables como globales ? :P
digamos quiero retornar un puntero a char pero el valor lo obtengo dentro de la funcion...
En línea
Uknow

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Estado de Variables de retorno
« Respuesta #3 en: 20 Enero 2012, 05:13 »

bien! gracias entonces pero y?
declarar todas las variables como globales ? :P
digamos quiero retornar un puntero a char pero el valor lo obtengo dentro de la funcion...
se hace de la misma manera. debes devolver la direccion del puntero.

Bueno, primero una cosa. Lo que pretendes hacer en a() no se hace así. Cuando declaras la variable x, su ámbito de visibilidad se limita a la función donde la declaras. Aun en el caso de que funcionara, no es la manera correcta de llevarlo a cabo.

Para hacer algo como lo que quieres hacer, se utiliza:

Código
int* p = new int; // si estas en C++
Código
int *p = malloc(sizeof(int)); /* Si estas en C*/

Por lo demás, ¿qué pasa con el valor 10? No pasa absolutamente nada. Se queda por ahí, en algún lugar de la memoria, solo y abandonado sin que nadie pueda acceder a él Y_Y. ¿No te da penita? No se puede liberar la memoria ocupada por el 10 hasta que finalice el programa.

En fin, cuando ya no necesites más la memoria reservada, haces:

Código
delete p;
Código
free(p);

Se puede implementar un recolector de basura automático, como en Python. Aquí hay un ejemplo.
en este caso, a mi me parece que utilizar memoria dinamica es irrelevante. No es necesario.

Saludos.
En línea
RHL


Desconectado Desconectado

Mensajes: 966


mental


Ver Perfil
Re: Estado de Variables de retorno
« Respuesta #4 en: 20 Enero 2012, 06:59 »

puesi, pero si devuelvo un puntero el puntero se estaria declarando dentro de la funcion, viene siendo lo mismo que yo puse
En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Estado de Variables de retorno
« Respuesta #5 en: 20 Enero 2012, 14:00 »

En mi opinión con solo la información que dio Xandrete ya debería estar solucionado el tema, a menos que busques algo mas y (en buen plan) no estés explicando de forma clara y precisa el problema.

Recopilando y extendiendo un poco:

* Puedes devolver la dirección en memoria de una variable local pero su uso (vía indirección) no sera valido ya que esas variables tienen el tipo de almacenamiento automático: se crean al inicio del bloque y se destruyen al finalizar este.

* Como indicas para solucionar esto puedes utilizar una variable "global" ya que su tipo de almacenamiento es estático: a partir de su definición la variable se crea y solo se destruye al finalizar el programa.

* Una mejor opción es seguir la recomendación de Xandrete: dependiendo del lenguaje utilizar malloc+free o new+delete ya que el objeto apuntado (como en el caso de las variables "globales") tiene el tipo de almacenamiento estático.

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Construccion de variables con otras variables - PHP
Desarrollo Web
Azielito 7 778 Último mensaje 18 Agosto 2005, 03:44
por Morris
Tailandia, en estado de emergencia por un intento de golpe de Estado
Noticias
panaka 0 214 Último mensaje 19 Septiembre 2006, 18:58
por panaka
Pasar variables por formulario sin variables globales¿?
PHP
hardkoo 11 2,518 Último mensaje 22 Noviembre 2006, 12:55
por chicuela66
retorno
Foro Libre
Manu_The_King 1 293 Último mensaje 12 Agosto 2007, 00:36
por | Zeden |
Variables dentro de variables (batch)
Scripting
^Arkangel^ 8 2,316 Último mensaje 6 Febrero 2008, 23:18
por GUN$
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines