c中的自由功能

时间:2012-09-17 14:17:06

标签: c

我已将内存分配给某些数据类型并分配了一些值。现在使用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));

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

你不能从记忆中“删除”东西。

free()做了什么回收内存,以便以后调用malloc()可以回收它。

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

答案 2 :(得分:0)

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

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

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

简要介绍如何安排记忆 。看看在堆: 此评论底部的http://www.geeksforgeeks.org/archives/14268或图1. Strange global variable behaviour, once variable name is changed issue disappears

我在这里写了一些关于malloc进程的更多信息: Can some explain the performance behavior of the following memory allocating C program?其中虚拟与物理内存,页面等也是其中的一部分。