Función libre en c

He asignado memoria a algún tipo de datos y asignado algún valor. ¿Ahora usando free son los datos en la memoria eliminados o no? ¿De qué sirve utilizar de forma free si no se eliminan los datos asignados? ¿Puede alguien ayudarme? Ex:

 int *arr; arr=(int*)malloc(sizeof(int)*1000); assert(arr!=NULL); /*Some operation*/ arr[123]=354; //some operations printf("%d",*(arr+123)); //calling some funcs free(arr); printf("\n%d",*(arr+123)); 

El punto de free es hacer que la memoria que asignó esté disponible para las siguientes llamadas a malloc . No garantiza que el búfer pasado a él se borre de ninguna manera.

De hecho, lo que estás haciendo es provocar un comportamiento indefinido ; acceder a un búfer que ha estado free podría dar el valor que se almacenó previamente en él, o cualquier otro valor, o podría bloquear su progtwig o hacer cualquier otra cosa.

No puedes “borrar” cosas de la memoria.

Lo que hace free() es recuperar la memoria, para que pueda ser reciclado por una llamada futura a malloc() .

No se puede anular la referencia legal de un puntero que recibió de malloc() (o de cualquier otra llamada de asignación dinámica) después de llamar a free() . Hacerlo invoca un comportamiento indefinido.

Mediante el uso de malloc, se reserva un número específico de bytes para usarlos como desee. Devuelto es una dirección al área. El área de memoria también está marcada en una tabla especial como ocupada, lo que significa que no puede ser reservada por otro proceso u otro malloc.

Cuando libera la memoria asignada, el área se marca como libre, pero los datos no se borran. Si desea borrar los datos, tendrá que hacer un memset o realizar un bucle manual y establecer los datos en 0 o algún otro valor antes de liberarlos .

Como han mencionado otros, la operación en la memoria libre no está definida.

Una breve introducción a cómo se puede organizar la memoria. Mire, por ejemplo, en el montón: http://www.geeksforgeeks.org/archives/14268 o Fig 1. Al final de este comentario: Extraño comportamiento de variable global, una vez que se cambia el nombre de la variable, desaparece el problema

He escrito algo más sobre el proceso malloc en sí mismo aquí: ¿Pueden algunos explicar el comportamiento de rendimiento del siguiente progtwig de asignación de memoria C? donde también la memoria virtual vs. física, páginas, etc. son algunos de los puntos.