c-如果数组被释放,那么等于堆上分配的数组元素的变量的值会改变吗



如果我有这个代码:

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

x总是==到1吗?还是会改变?

x无论在分配后对arr/arr[1]做什么都不会更改。C中的赋值是按值进行的;读取来自arr[1]的值,并将结果写入用于x的存储器,之后,xarr[1]之间没有关系。

你遇到问题的唯一方法(就像在未定义的行为中,鼻妖之类的事情(是,如果你将一个指针存储到数组中,并在free之后取消引用它,这将尝试从数组曾经所在的位置读取,并触发未定义的行为。

最新更新