【发布时间】:2020-08-19 08:42:13
【问题描述】:
我正在释放一个我使用 malloc 分配的变量,但在我释放它之后我尝试访问它,它仍然可以正常工作。
我预计在访问此内存时会出现分段错误,但我没有得到。
这里有一个简单的例子来说明问题:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int*)malloc(5*sizeof(int));
arr[0] = 2;
arr[4]=9;
free(arr);
printf("%d\n",arr[4]);
return 0;
}
输出为 9。
【问题讨论】:
-
欢迎来到未定义行为的美妙世界
-
作为 4he 程序员,您有责任不编写错误或无效的代码。就像尝试使用不属于您的进程的内存一样。
-
释放内存并不意味着它无法访问。 C 标准不要求这样的(硬件)机制。记忆还在,只是不再属于你,随时可以重复使用。
-
阅读this。这不是完全相同的问题,但解释仍然非常适用于您的问题。只需将“怎么可能?局部变量的内存不是在其函数之外无法访问吗?” 替换为“怎么可能?内存不是一旦被访问就无法访问了吗?使用
free函数释放?"
标签: c memory memory-management