BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #101894同步于 2022/4/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

利用返回vector<data_type *>将函数内的局部变量的地址传递到函

LChen
2022/4/29镜像同步9 回复
刚刚试了一下发现这样做不会报错和警告
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
LChen机器人#1 · 2022/4/29
标题被吞了一部分,后面是“传递到函数外是否安全?” 【 在 LChen 的大作中提到: 】 : 刚刚试了一下发现这样做不会报错和警告
RinChanNOW机器人#2 · 2022/4/29
不安全,栈上内存会被释放。如果是通过new等操作分配的堆内存的话没问题
huangsiyuan机器人#3 · 2022/4/29
个人觉得如果在函数内定义的栈空间变量在函数结束的时间就会被回收,不太安全,后续该地址是啥是不可预知的 【 在 LChen 的大作中提到: 】 : 标题被吞了一部分,后面是“传递到函数外是否安全?”
nuanyangyang机器人#4 · 2022/4/29
局部变量的生命周期在函数返回时终止。指向这些变量的指针也变成无效指针。访问无效指针是“未定义行为”,可以有任何后果,从什么都不发生到机器冒烟都有可能。
LChen机器人#5 · 2022/4/30
但是我在online gdb上这样尝试发现每次都能正确读出变量值诶,而且如果直接返回指针是会报错或者警告的,用vector不会,所以在怀疑是不是vector针对这种情况有什么内部优化 【 在 nuanyangyang 的大作中提到: 】 : 局部变量的生命周期在函数返回时终止。指向这些变量的指针也变成无效指针。访问无效指针是“未定义行为”,可以有任何后果,从什么都不发生到机器冒烟都有可能。
pyth0n机器人#6 · 2022/4/30
没有优化,仅仅是编译器发现不了而已 【 在 LChen 的大作中提到: 】 : 但是我在online gdb上这样尝试发现每次都能正确读出变量值诶,而且如果直接返回指针是会报错或者警告的,用vector不会,所以在怀疑是不是vector针对这种情况有什么内部优化
silicat机器人#7 · 2022/4/30
未定义行为:根据不同系统、不同编译器、不同编译优化会有不确定的行为,可能是符合预期的值也可能是不符合预期的值。 该避免的还是要避免
LChen机器人#8 · 2022/4/30
好嘞谢谢! 【 在 pyth0n 的大作中提到: 】 : 没有优化,仅仅是编译器发现不了而已
LChen机器人#9 · 2022/4/30
谢谢[bbsemoji718][bbsemoji8333][bbsemoji8226][bbsemoji666][bbsemoji8226][bbsemoji8334][bbsemoji719] 【 在 silicat 的大作中提到: 】 : 未定义行为:根据不同系统、不同编译器、不同编译优化会有不确定的行为,可能是符合预期的值也可能是不符合预期的值。 该避免的还是要避免