堆栈上的本地变量在超出范围时未被删除
Local variable on the stack not getting deleted when out of scope
#include <iostream>
int* retPointer()
{
int x=10; //same as auto int x =10;
return &x;
}
int main(int argc, char **argv)
{
std::cout<<"x="<<*retPointer()<<std::endl;
return 0;
}
在上面的例子中,我返回一个指向要堆栈的局部变量的指针。当我在man((中打印这个指针指向的值时,我应该会得到一个seg错误。当我从函数retPointer((返回时,变量x应该超出范围。所以,当尝试访问main((中的值时,我应该不会出现分段错误吗?我是不是遗漏了什么?
输出=x=10
从retPointer()
返回时,x
对象确实超出范围,并且取消引用指向生存期已过期对象的指针是未定义行为。
具有Undefined Behavior的程序意味着任何都可能发生,包括崩溃、表现得好像什么都没发生一样(如*retPointer()
返回正常值,如10
(,或格式化硬盘驱动器。
尽管最后一个选项不太可能,但您肯定不想在程序中有未定义的行为。永远不要使用自动存储返回指向本地对象的指针或引用。
当我在man((中打印这个指针指向的值时,我应该会得到一个seg错误。
你应该?规范中说这会发生在哪里?
您正在调用未定义的行为任何事情都有可能发生。
相关文章:
- 我应该如何使用remove_if删除两个数字范围内的元素
- 当 std::unique_ptr 在手动删除其拥有的对象后超出范围时,它如何工作?
- SFML 纹理持有人已删除,但仍在范围内
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 删除重复的元素并给出一个范围总和
- 如何创建一个结构的实例,当它不在范围内时,该实例将不会被删除
- 使用其范围版本从容器中删除元素的最佳方法
- 删除复制构造函数和运算符=类范围访问
- 使用C 在范围x1和x2中删除值的节点
- 我们可以在范围循环中使用引用(而不是指针)上的删除
- 指向堆栈对象的指针是否在超出范围时被删除
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- 删除"超出矢量误差范围"的打印语句后输出不同的根本原因
- 为什么当我尝试对使用 New 函数启动的对象调用删除函数时出现范围错误?
- 从覆盖范围报告中删除自动生成的异常代码
- 擦除范围从std :: vector删除向量的最佳方法
- c 从范围删除对象的操作员导致崩溃dealloceLoceLoceLoceLoceLoceLoceLoceLoceL
- C++变量不会在范围末尾删除
- 我是否要删除函数范围内的内存?
- 删除矢量中的范围元素(C++)