free()是否会删除存储在动态分配的内存中的数据?

我编写了一个简单的程序,在free()之后测试动态分配的内存的内容,如下所示。(我知道释放后我们不应该访问该内存。我编写此代码是为了检查释放后内存中将存在什么)

#include <stdio.h>

#include <stdlib.h>

main()

{

int *p = (int *)malloc(sizeof(int));

*p = 3;

printf("%d\n", *p);

free(p);

printf("%d\n", *p);

}

输出:3 0

我以为它将通过第二个打印语句打印垃圾值或崩溃。但是它总是打印0。

1)这种行为是否取决于编译器?

2)如果我尝试使用free()两次释放内存,则会生成核心转储。在手册页中,提到程序行为异常。但是我一直在获得核心转储。这种行为是否也取决于编译器?

回答:

是否free()删除存储在动态分配的内存中的数据?

不,free只需释放其参数(指针)所指向的已分配空间。此函数接受指向先前分配的内存块的char指针,并释放它-即,将其添加到可能重新分配的空闲内存块列表中。

释放的内存不会以任何方式清除/擦除。

您不应取消引用释放的(悬空的)指针。标准说:

7.22.3.3免费功能:

[…]否则, 。

上面的引用还指出,释放指针两次将调用 未定义的行为 。UB实施后,您可能会得到预期的意外结果。可能有程序崩溃或核心转储。

以上是 free()是否会删除存储在动态分配的内存中的数据? 的全部内容, 来源链接: utcz.com/qa/427095.html

回到顶部