小编Gab*_* Re的帖子

C++ 悬空引用奇怪的行为

int*& f(int*& x, int* y){
 int** z = &y;
 *z = x;
 return *z;
}
Run Code Online (Sandbox Code Playgroud)

大家好,我在考试中得到了这段代码,但我遇到了一些问题。

我的理解是,给定对函数体中构造的指针 (x) 和指针副本 (y) 的引用,将创建本地双指针 (z) 并用 y 左值初始化,然后取消引用 1 次,因此 y 正在被访问,并且 y 中包含的地址现在变成 x 中包含的地址。之后 *z 作为指针引用返回,我假设为 y。

如果我之前的部分是正确的,我不会解释为什么返回在函数退出时被释放的 y (因为临时参数)不会在程序中产生任何问题,实际上考试答案是该函数返回一个悬空参考我同意这一点,但是,复制/粘贴代码,并“播放”返回的变量,甚至在返回参数后进行随机操作,以便“编辑堆栈”,其中释放的 y 仍然存在并且“准备被覆盖”(如果我仍然是对的)不会出现程序的任何未定义的行为。

我唯一的解释是,返回仅复制 y 中包含的右值,或者可能返回左值和右值(因为返回对指针的引用),但当与外部指针“调用”函数 y 关联时,它不会没有得到正确的释放,或者以某种方式获取值的指针取代了被释放的 y 指针。

在底部您可以找到用于测试函数 int*& f(int*&, int*) 的代码。

我的问题是:这是一个正确的悬空引用,还是可以在程序中使用这样的东西的边界情况?

#include <iostream>
using namespace std;
int a = 65;

int*& f(int*& x, int* y)
{
    cout<<"indirizzo di y: "<<&y<<endl;
    cout<<"indirizzo di x: …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14 c++17

3
推荐指数
1
解决办法
433
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

c++17 ×1