范围和指针
Scopes and Pointers
这是我有疑问的代码:
int* getPtrToFive() {
int x = 5;
return &x;
}
int main() {
int *p = getPtrToFive();
cout << *p << endl; // ???
}
讲座幻灯片说 *p 不会给出有效的结果,因为当返回 getPtrToFive 时,x 超出了范围。但是,我认为 getPtrToFive 已经包含 5 的值,这将验证 *p?是因为指针试图将我引导到 获取超出范围 x 的 PtrToFive 吗?
您似乎无法理解指针的基本概念。把它想象成房子的地址。1 Main St 是您的指针。但是,如果房子被摧毁,会发生什么?有人会一路开车到主街1号,却发现那里有一堆碎片......当然不是一个好的结果。
因此,当函数退出时,房子就会被摧毁。你还有地址,但那里什么都没有了。
是的,你是对的。
即使输出以某种方式5
,访问超出范围的内存也是非法的。
相关文章:
- 正在将指针转换为范围
- 通过函数指针定义类范围之外的方法
- 如果非动态变量被指针引用,何时超出范围?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 指向地址的指针似乎调整在范围之外
- 使用基于范围的指针循环和向量时出现C++错误
- 使用基于范围的for循环取消对矢量指针的引用
- 如何避免指针超出范围(多态性)的C++分段错误
- 用基于范围的for循环填充指针向量
- 指针上的 For 循环:它会移动整个地址范围吗?
- 从原始指针(衰减的 C 样式数组)和大小生成范围::视图
- 对智能指针范围的混淆
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- 指针范围结束后,C 在堆上访问对象
- C++-安全指针范围
- x86-64上检查指针范围是否跨越N字节对齐地址的最快方法
- C++指针范围
- 肯定无效的指针范围
- 从堆栈地址形成指针范围是未定义的行为吗