如何通过Stack的定义不起作用?

时间:2015-11-07 10:49:32

标签: c stack

int *something() {
    int x = 5;
    int *b = &x;
    return b;

}

int main() {
    int z = *something()
    printf("%d",z);

}

如果在堆栈上分配了名为something的函数,那么它是如何工作的,然后在它返回值后移除int x和int * b

如果它们被删除,我们将无法推断something返回的指针,因为它指向的是从堆栈中删除的int x

3 个答案:

答案 0 :(得分:0)

您的问题是x是一个临时变量,当它在something()末尾超出范围时,尽管b指向其地址,b然后,当x超出范围时,将指向未定义的内存,并且取消引用它将导致未定义的行为。

答案 1 :(得分:0)

这篇帖子似乎在问为什么这个有用。答案是, 是的,something后局部变量不再有意义 退出,但指针仍指向某事。它指出了一点 可能包含任何内容的内存。所以你会得到一些输出。它 只是没有任何意义。

答案 2 :(得分:0)

函数本身未在堆栈中分配。

它有两个局部变量x和b。

该函数返回一个指向其局部变量x的指针,该函数在退出函数后被视为不存活。

然而,直到变量占用的内存不会被重写,变量的值才会出现在那里。

所以变量z可以得到它的值。

然而,一般来说,这是一种未定义的行为。