我已将内存分配给某些数据类型并分配了一些值。现在使用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));
答案 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?其中虚拟与物理内存,页面等也是其中的一部分。