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