Memoria Dinamica

nosic
06 de Mayo del 2004
hola a todos, tengo una dudilla que espero que me ayudeis, no voy a pedir un programa ni mucho menos como tantos flojos que hay por aqui... el caso es que tengo este cod fuente que adjunto simplemente para probar como funciona la asignacion dinamica de memoria mediante malloc. el programa funciona menos por un detalle, que no me libera la memoria, y es lo que querria saber, que hacer para liberar la memoria

#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
void main ()
{
int *vector, i, n;

printf ("Deme la dimension del vector: ");
scanf ("%d",&n);

vector = (int *)malloc(n*sizeof(int));

printf ("n");

if (vector == NULL)
{
clrscr();
gotoxy (32,12); printf ("nReserva fallidan");
getch();
exit (0);
}

for (i=0; i<n;i++)
{
printf ("nValor de la componente [%d] del vector: ",i+1);
scanf ("%d",vector+i);
}

for (i=0;i<n;i++)
printf ("nComponente [%d] = %d",i+1, *(vector+i));

free (vector);

for (i=0;i<n;i++)
printf ("nComponente [%d] = %d",i+1, *(vector+i));

getch();
clrscr();
}

Alejandro_
06 de Mayo del 2004
Pues sí, con free(vector) la memoria queda liberada.

Memoria liberada quiere decir que estará disponible para futuras asignaciones, no que se haya eliminado físicamente. Por eso es que después de free() , todavía fue posible acceder a los datos de vector. Claro que como ese espacio de memoria está disponible para quién la necesite primero, de ninguna manera podemos esperar que una futura llamada a vector[i] vaya a devolver algo con sentido.

Alejandro


nosic
06 de Mayo del 2004
ok, liberar la memoria entiendo que significa que se deja de asignar una parte de memoria que antes estaba asignada a, por ejemplo, una variable, por ello si libero la memoria, los datos siguen estando ahi, cierto, pero el puntero sigue apuntando al mismo sitio, por eso pasa lo que pasa, yo lo que esperaba es que al liberarse se perdiese tambien la direcion a la que apunta el puntero, ok ok, gracias alejandro ;)