有c++大佬吗?学习过程中遇到一个问题

trexyfy-avatar

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]
えいんず-avatar

えいんず

作业自己做
第一反应想想什么叫引用
第二犹豫编译器和垃圾回收的原理可能要考虑一下。
eim-avatar

eim

交规说红灯不能过马路,我过去了一点事都没有,是出了什么问题吗?
zaEXILE-avatar

zaEXILE

你试试输出下局部变量和返回值的地址,我记得a和ref应该不是同一个东西
哦傻了没看到int&,内存还没被覆盖,楼下正解
Shadowp-avatar

Shadowp

这块内存没被回收也没被改写, 所以值还是30;
bgfyjbdrykvt-avatar

bgfyjbdrykvt

hxd 怎么学[img]https://img.nga.178.com/attachments/mon_201209/14/-47218_5052bc521c04b.png[/img] 买什么书看什么课
Carlos99-avatar

Carlos99

因为那块内存没有被覆写啊
FastBands-avatar

FastBands

这操作太骚,以至于不知道怎么说
Kkwateh-avatar

Kkwateh

因为这部分内存还没被覆盖
在这部分内存被覆写之前都还会是30
不要依赖于他不会被覆写进行编程
DominicTheScottish-avatar

DominicTheScottish

你把引用返回来了,这个地址是一个整形,值是30
shitbag-avatar

shitbag

“悬空指针”(dangling pointer)


“悬空指针”(dangling pointer):是指针最初指向的内存已经被释放了的一种指针。通俗点可以理解:指针指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。
azzone4-avatar

azzone4

这就是为啥不推荐新手学C艹,一个语言特性章节的东西,做出试验结果需要对操作系统内存回收有一定理解才能搞懂。
你这还算好的,知道拿出来问也有人回答。有的人没搞懂就上手,最后一旦这玩意出bug,复现困难,结果不定,查起来头疼的要死。
trexyfy-avatar

trexyfy

[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:喘]
mononoke-avatar

mononoke

没回收啊。。。c艹还是多看看基础的吧
Hopp-avatar

Hopp

回去再读几遍什么是引用,本质就是指针
Psychotic.EGG-avatar

Psychotic.EGG

你这个函数返回的引用指向了一个已被销毁的对象,还能显示30只是运气好,没有被其他过程覆盖而已。
mokki-avatar

mokki

access dangling reference is undefined behavior
Amonx-avatar

Amonx

编译器没有警告吗