c中的自由function

我已经为某些数据类型分配了内存并分配了一些值。 现在使用free是删除内存中的数据与否? 如果未删除分配的数据,使用free用途是什么? 谁能帮我吗? 例如:

 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)); 

free是指让你分配的内存可用于跟随malloc调用。 它不保证传递给它的缓冲区以任何方式被擦除。

事实上,你所做的是激发未定义的行为 ; 访问一个free的缓冲区可能会提供先前存储在其中的值,或任何其他值,或者它可能会使程序崩溃,或者执行其他任何操作。

你不能从内存中“删除”东西。

free()作用是回收内存,以便将来调用malloc()可以回收它。

在调用free()之后,您无法合法地取消引用从malloc() (或任何其他动态分配调用)获得的指针。 这样做会调用未定义的行为。

通过使用malloc,您可以预留指定数量的字节以用于您想要的任何内容。 返回是该地区的地址。 内存区域也在特殊表中标记为已占用,这意味着它不能被另一个进程或另一个malloc保留。

当释放分配的内存时,该区域被标记为空闲,但数据不会被删除。 如果要删除数据,则必须先执行memset或手动循环并将数据设置为0或其他值, 然后再释放它

正如其他人所提到的,对空闲内存的操作是不确定的。

简要介绍如何安排内存。 看看在堆: http : //www.geeksforgeeks.org/archives/14268或图1底部的评论: 奇怪的全局变量行为,一旦变量名称被更改,问题就会消失

我在这里写了一些关于malloc进程的更多信息: 可以解释一下以下内存分配C程序的性能行为吗? 其中虚拟与物理内存,页面等也是一些要点。