释放的已分配内存仍可访问

时间:2020-08-19 08:42:13

标签: c memory memory-management

我正在释放使用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。

1 个答案:

答案 0 :(得分:1)

很抱歉,问题似乎是您期望出现细分错误。

C语言标准不要求出现分段错误。访问释放的指针后,任何事情都会发生-包括任何内容。

很有可能,内存分配器缓存以供重复使用,而不是将内存返回给系统。这样,如果您需要再次分配内存,第二次分配会更快。

这意味着,从系统的角度来看,您的程序仍然“拥有”该内存。

分配器的角度来看,该内存归分配器所有,您不应该使用它(分配器可能会在该位置写自己的数据)。

程序的角度来看,您有一个相当错误。

相关问题