La era de la informatica

Saturday, February 17, 2007

Problema 1: Reserva de memoria en C

(EDITADO: como me apuntaba el cremero (La Cremeriè) este programa compilado con el gcc en windows muestra la misma salida por pantalla para ambos printf, lo cual lleva a confusion, pero eso no quiere decir que no suceda lo que realmente sucede, que es lo que os pregunto, ¿que sucede? Para solucionar esto y que al compilar en windows os salga una salida diferente y esto no os desvie del verdadero problema he creado un codigo que lo que hace es meter una llamada a una funcion que como vereis no hace nada, pero esto provoca que ya si la salida de los 2 printf sea distinta. Ahora resolver el misterio es mucho mas facil ¿verdad? Espero vuestros correos y amplio el plazo de resolucion hasta el dia 28/02. Recordad la pregunta, porque pasa esto? Explicar con detalle)

Hola, que tal? Ya que estoy decidido a darle un poco de vidilla a este blog, voy a poner un problemita de programación en C. Este primero es muy sencillo y curioso. El siguiente codigo tiene un problema obvio, pero las preguntas que os hago son: ¿Cual es la salida por pantalla del siguiente codigo? ¿Por que sucede esto? (Explicar con el maximo detalle posible).


(EDITADO: Nuevo codigo)
#include <stdio.h>
#include <stdlib.h>

int *ptr()
{
int y;
y=3;
return &y;
}

void funcionquenohacenada()
{
int *x;

x=(int*)malloc(sizeof(int)*5);
free(x);
}

int main()
{
int *pointer, content;
pointer = ptr();
content = *pointer;
printf("%d\n", content);
funcionquenohacenada();
content = *pointer;
printf("%d\n", content);
return 0;
}
(FIN DE EDICION)

(EDITADO: codigo antiguo, no usar en windows)
#include <stdio.h>

int *ptr()
{
int y;
y=3;
return &y;
}

int main()
{
int *pointer, content;
pointer = ptr();
content = *pointer;
printf("%d\n", content);
content = *pointer;
printf("%d\n", content);
return 0;
}

Podeis compilarlo y ejecutarlo para ver que aunque aparentemente los 2 printf son similares la salida es distinta. Aunque lo suyo es intentar hacerlo sin programarlo. Mandar vuestras respuestas a mi direccion de correo que esta en mi perfil y dentro de una semana publicare el resultado y dire quien lo ha acertado. Como es muy sencillo imagino que todo el mundo lo acertara sin problemas.
(A partir de ahora dejare las entradas de los problemas sin comentarios para que mande cada uno su solucion al email y asi no se entorpezcan los unos con los otros)