假设我们有以下代码。st 是一个全局堆栈,并已正确初始化。我们调用 foo()
struct stack *st;
int foo() {
int x = 1;
stack_push(st, &x);
}
现在,堆栈包含一个指向 x 的指针。在 foo 超出范围后,地址 &x 会发生什么?是否已解除分配?我们可以相信,当我们稍后 pop() 堆栈并取消引用它时,该值将是 1?
编辑:这是我目前的想法。由于 x 是在堆栈上分配的,一旦超出范围,任何人都可以使用地址 &x 中占用的内存,因此稍后 pop() 返回的取消引用值可能不是 1。