trexyfy
2021-12-28T14:09:01+00:00
局部变量的引用作为函数的返回值,返回后应该被释放的,为啥我这输出出来还是有值?
[img]https://img.nga.178.com/attachments/mon_202112/31/-7Q2p-1mi7XiZ53T3cSqo-zk.jpg.medium.jpg[/img]
作业自己做
第一反应想想什么叫引用
第二犹豫编译器和垃圾回收的原理可能要考虑一下。
交规说红灯不能过马路,我过去了一点事都没有,是出了什么问题吗?
你试试输出下局部变量和返回值的地址,我记得a和ref应该不是同一个东西
哦傻了没看到int&,内存还没被覆盖,楼下正解
hxd 怎么学[img]https://img.nga.178.com/attachments/mon_201209/14/-47218_5052bc521c04b.png[/img] 买什么书看什么课
因为这部分内存还没被覆盖
在这部分内存被覆写之前都还会是30
不要依赖于他不会被覆写进行编程
“悬空指针”(dangling pointer)
“悬空指针”(dangling pointer):是指针最初指向的内存已经被释放了的一种指针。通俗点可以理解:指针指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。
这就是为啥不推荐新手学C艹,一个语言特性章节的东西,做出试验结果需要对操作系统内存回收有一定理解才能搞懂。
你这还算好的,知道拿出来问也有人回答。有的人没搞懂就上手,最后一旦这玩意出bug,复现困难,结果不定,查起来头疼的要死。
[quote][pid=577962174,30086504,1]Reply[/pid] Post by [uid=62589346]TX1玖玖捌[/uid] (2021-12-31 22:14):
hxd 怎么学[img]https://img.nga.178.com/attachments/mon_201209/14/-47218_5052bc521c04b.png[/img] 买什么书看什么课[/quote]我在b站搜的,我想先入下门再进专业的[s:ac:喘]
你这个函数返回的引用指向了一个已被销毁的对象,还能显示30只是运气好,没有被其他过程覆盖而已。
access dangling reference is undefined behavior