-1

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

3 回答 3

5

的要点free是使您分配的内存可用于以下对malloc. 它不保证传递给它的缓冲区以任何方式被擦除。

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

于 2012-09-17T14:18:25.993 回答
2

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

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

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

于 2012-09-17T14:19:17.773 回答
0

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

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

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

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

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

于 2012-09-17T14:32:40.813 回答