This question already has answers here:
returning a local variable from function in C [duplicate]

(4 个回答)


6年前关闭。




在我们的讲座中,我们有以下例子:
int *foo(int x) {
    return &x;
}

int* pt = foo(x);
*pt = 17;

它被显示为一个不好的例子,但没有进一步解释。为什么这很糟糕?

最佳答案

这里

int *foo(int x) {
x 是一个局部的、非静态的变量。通过做
return &x;

您返回局部变量 x 的地址。只要函数存在,它就存在,当函数退出时,该地址将无效,您可以随意使用。通过使用
*pt = 17;

您取消引用此地址并将 17 写入此无效内存位置。这会触发 Undefined Behavior 。这就是给定代码不好的原因。

关于C 指针示例 - 这有什么不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29918173/

10-12 16:58