error liberando memoria en C

Andres
01 de Febrero del 2009
Hola gente, estoy teniendo problemas para liberar punteros en C, por lo visto no estoy entendiendo bien como funciona la funcion "free", les agradeceria si me puedan explicar cual es mi error..
Muchisimas gracias de antemano..

Código:
#include<stdio.h>
#include<stdlib.h>

int *reserv_mem(void);

int main()
{
int var = 9;
int *ptr = reserv_mem();
ptr = &var;
free(ptr); //ACA ME TIRA ERROR
return 0;
}

int *reserv_mem(void)
{
int *temp = NULL;
temp = (int *) malloc(sizeof(int));
return temp;
}

Nota: estoy utilizando gcc en linux..