gpt4 book ai didi

c++ - 返回奇怪值的指针的引用

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:18 25 4
gpt4 key购买 nike

任何人都可以向我解释为什么这段代码有效(为什么它返回一个值)?

int main()
{
int *ptr = new int(113);
int &rPtr = *ptr;

delete ptr;

cout << rPtr << endl;

return 0;
}

基本上,这是我得到的返回值:

-572662307

最佳答案

您正在做的事情会导致未定义的行为,因此您得到这个数字是完全合理的行为。

当你执行这个序列时:

int *ptr = new int(113);
int &rPtr = *ptr;

引用 rPtr 现在引用您使用行 new int(113) 创建的整数。在下一行,您执行

delete ptr;

这会删除 int,这意味着该对象不再存在。任何指向它的指针或引用现在都引用一个已释放的对象,这会导致未定义的行为。因此,当您使用

打印 rPtr
cout << rPtr << endl; 

任何事情都可能发生。在这里,您得到的只是垃圾数据,但程序很容易崩溃或报告调试错误消息。

有趣的是:您打印的值 (-572662307) 被视为 32 位无符号值,是 0xDDDDDDDD。我敢打赌这是内存分配器将一个值放入释放的内存中,以帮助您调试像这样的内存错误。

希望这对您有所帮助!

关于c++ - 返回奇怪值的指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com