malloc() y free()
Publicado por Clayder (16 intervenciones) el 07/10/2008 08:16:27
Hola:
Estoy teniendo problemas para entender el comportamiento de estas dos funciones. En el caso especifico de los siguientes ejemplos:
int* funcion_1()
{
int n1;
int n2;
int* s;
s[0] = 5;
return s;
}
....
int *n = funcion1();
printf("%d", n[0]);
....
En la linea que imprimo el valor 0 de de n, me da el resultado correcto, osea 5. Sin embargo si en la funcion: funcion_1(), le quito las declaraciones de:
int n1;
int n2;
Sale un error, a menos que reserve espacio de memoria para "s" con malloc() o new, lo cual parece logico. Entonces ¿por que sucede esto cuando declaro variables antes de declarar el puntero y este pareciera ya no necesitar que le reserven espacio de memoria?, porque el malloc() se usa a la par con los punteros, no?
Mi otra duda, es con respecto a la funcion free(). Es decir, se supone que libera espacio reservado antes, no?, pero si tuviera un puntero:
int *n = (int*)malloc(sizeof(int));
//free(n);
n[0] = 14;
printf("%d", n[0]);
No se supone que ¿si le hiciera free(n)(linea comentada), ya no deberia imprimir el valor n[0], puesto que ya no tiene nada?, o en todo caso ¿como funciona free() exactamente?
Disculparan las multiples preguntas, pero me llene de dudas.
Gracias de antemano.
Estoy teniendo problemas para entender el comportamiento de estas dos funciones. En el caso especifico de los siguientes ejemplos:
int* funcion_1()
{
int n1;
int n2;
int* s;
s[0] = 5;
return s;
}
....
int *n = funcion1();
printf("%d", n[0]);
....
En la linea que imprimo el valor 0 de de n, me da el resultado correcto, osea 5. Sin embargo si en la funcion: funcion_1(), le quito las declaraciones de:
int n1;
int n2;
Sale un error, a menos que reserve espacio de memoria para "s" con malloc() o new, lo cual parece logico. Entonces ¿por que sucede esto cuando declaro variables antes de declarar el puntero y este pareciera ya no necesitar que le reserven espacio de memoria?, porque el malloc() se usa a la par con los punteros, no?
Mi otra duda, es con respecto a la funcion free(). Es decir, se supone que libera espacio reservado antes, no?, pero si tuviera un puntero:
int *n = (int*)malloc(sizeof(int));
//free(n);
n[0] = 14;
printf("%d", n[0]);
No se supone que ¿si le hiciera free(n)(linea comentada), ya no deberia imprimir el valor n[0], puesto que ya no tiene nada?, o en todo caso ¿como funciona free() exactamente?
Disculparan las multiples preguntas, pero me llene de dudas.
Gracias de antemano.
Valora esta pregunta


0