从函数返回静态指针到局部变量

时间:2014-03-01 13:04:37

标签: c++ pointers reference static

我发现此代码on web为例,但我认为这不正确。返回自动变量的地址,这有点巧合,有时可能会起作用:

返回指向已销毁的局部变量的指针,该变量将成为无效的内存位置,未定义的行为

我唯一的犹豫是关于指针是static,但我认为这没有任何改变,因为这是应该是static而不是指针的变量:局部变量将被销毁。你能否确认或否认?

double *& showNumber()
{
    double n = 1550.85;
    static double *v = &n;
    return v;
}

int main(int argc, char *argv[])
{
    double sn = *showNumber();
    sn = *showNumber();
    //...
}

5 个答案:

答案 0 :(得分:2)

为了明确定义此代码,nv都需要static

目前,*showNumber()undefined behaviour取消引用dangling pointer

答案 1 :(得分:2)

您的代码仍有未定义的行为,因为退出函数后静态指针的值无效。指针引用的局部变量将被销毁。并且下次调用该函数时,该局部变量的地址可能不同。

你可以按照以下方式编写你的功能

double * showNumber()
{
    static double n = 1550.85;
    return &n;
}

在这种情况下,返回的指针将包含相同的有效值。

答案 2 :(得分:1)

一旦初始化,静态变量就会在程序的整个持续时间内持续存在。您已完成v的设置,但<{1}}的地址

答案 3 :(得分:0)

如果指针及其变量都是静态的,那么只有代码才行。否则,局部变量无论如何都会死亡。

答案 4 :(得分:0)

独立于本地或全局,静态变量将一直持续到程序结束。 但是当我们返回该变量的值时,重新开始使用全局。因为静态本地可能会因线程而受到影响。