我正在释放使用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。
答案 0 :(得分:1)
很抱歉,问题似乎是您期望出现细分错误。
C语言标准不要求出现分段错误。访问释放的指针后,任何事情都会发生-包括任何内容。
很有可能,内存分配器缓存以供重复使用,而不是将内存返回给系统。这样,如果您需要再次分配内存,第二次分配会更快。
这意味着,从系统的角度来看,您的程序仍然“拥有”该内存。
从分配器的角度来看,该内存归分配器所有,您不应该使用它(分配器可能会在该位置写自己的数据)。
从程序的角度来看,您有一个相当错误。