首页 > 解决方案 > 如果数组被释放,等于分配在堆上的数组元素的变量值会改变吗?

问题描述

如果我有这个代码:

int* arr = malloc(sizeof(int) * 9);
for(int i = 0; i < 9; i++){
   arr[i] = i;
}
int x = arr[1];
free(arr);

x 是否总是 == 为 1?还是会改变?

标签: cmemory

解决方案


x无论您对分配arr/arr[1]分配后做什么,都不会改变。C中的赋值是按值;读取from 的值arr[1],并将结果写入 的存储,之后和x之间没有关系。xarr[1]

您遇到问题的唯一方法(如在未定义的行为中,鼻恶魔之类的事情)是如果您将指针存储到数组中并在 之后取消引用它free,这将尝试从数组过去的位置读取,并且触发未定义的行为。


推荐阅读