繁体   English   中英

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

[英]returning static pointer to local variable from function

在网上发现这个代码就是一个例子,但我认为这是不正确的。 返回自动变量的地址,这有点巧合,它有时可能会起作用:

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

我唯一的犹豫是关于指针是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();
    //...
}

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

现在, *showNumber()具有未定义的行为,因为它取消引用悬空指针

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

您可以通过以下方式编写函数

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

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

一旦初始化,静态变量就会在程序的整个持续时间内持续存在。 你们都为v而设,但不是 n的地址。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM