系列文章目录
一、malloc申请的堆空间,free后还能访问吗?
答案是能。
测试步骤
代码如下(示例):
#include <stdio.h>
#include <stdlib.h>
int main()
{
//申请堆空间
int* p = (int*)malloc(sizeof(int) * 10);
if (NULL == p)
{
printf("动态分配内存失败");
exit(-1);
}
//数组赋值
for (int i = 0; i < 10; i++)
{
p[i] = i;
}
//输出数组
for (int i = 0; i < 10; i++)
{
printf("%d ",p[i]);
}
//释放堆空间
free(p);
//再次输出数组,可以看到释放后依然可以访问,但值已经改变
for (int i = 0; i < 10; i++)
{
printf("%d\n", p[i]);
}
return 0;
}
结果:第一次正常输出,数据无误,free(p)后,能输出,但数据异常。
结论:free(p)后,只是告诉操作系统这块堆内存可以继续分配,p成为野指针,依然指向这块内存。
所以free(p)后,要将p置为空。
总结
malloc注意事项。