一定会找到好的工作 2022-08-18 11:03 采纳率: 66.7%
浏览 30
已结题

c++局部变量释放,还可以拿到地址的值

局部变量释放,但是仍然能拿到值
vector<int*> vvData;
{
int    a= 10;
int    b= 20;
int    c = 30;
int* p1 = &a;
int* p2 = &b;
int* p3 = &c;
vvData.push_back(p1);
vvData.push_back(p2);
vvData.push_back(p3);
int y;
}
for (int i=0; i< vvData.size(); i++)
{
    cout<<vvData[i]<<":"<<*vvData[i]<<endl;
}
把这一段代码用函数封装起来,返回出来的时候,就拿不到值,但是这种写法就能拿到值,按道理局部变量再括号外就释放掉了,为什么还能拿到值
  • 写回答

3条回答 默认 最新

  • 赵4老师 2022-08-18 13:30
    关注

    栈中的变量通常包括函数参数和函数里声明的临时变量。
    栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。
    而栈中的类变量退出其作用域时,会自动执行其析构函数,……
    所谓在栈中“申请”N字节的空间,其实只是将栈指针寄存器(16位sp,32位esp,64位rsp)的值多减N而已。

    其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题