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中的赋值是按值;读取from 的值arr[1]
,并将结果写入 的存储,之后和x
之间没有关系。x
arr[1]
您遇到问题的唯一方法(如在未定义的行为中,鼻恶魔之类的事情)是如果您将指针存储到数组中并在 之后取消引用它free
,这将尝试从数组过去的位置读取,并且触发未定义的行为。
推荐阅读
- reactjs - 如何在 reactjs 中一次渲染一个可重用组件?
- php - Codeigniter - 克隆数据(但删除不存在的 1 列)
- testing - 如何在赛普拉斯点击 x 次
- ruby-on-rails - Rails 分组并用逗号加入
- java - 如何删除FTP目录中的所有txt文件?
- r - XGBoost 对变量选择有效吗?
- node.js - 将日志从 heroku node.js 脚本发送到我的 iPhone 的最简单方法
- python - 带有 MultiIndex 列的 Pandas DataFrame 中的布尔索引
- sharepoint - 如何使用 Apache Camel 读取 OneDrive 目录?
- ruby - 如何打印 Ruby 指令的内存地址?