是否有可能保持指向超出该变量范围的局部变量的指针?

时间:2013-04-13 18:12:17

标签: c pointers memory

假设我使用此代码:

int *pointer;
if(1) {
    int num = 5; // local variable, can't be used outside the if block.
    pointer = &num
}

这是一种跟踪num变量的安全方法吗?我知道这段代码会起作用。但我认为编译器将使用旧的num内存来分配新变量,导致pointer引用不可预测的值。这是真的吗?

2 个答案:

答案 0 :(得分:11)

不,这不安全。当达到}的结束if时,num的生命周期结束,pointer的值变得不确定。之后使用它会调用未定义的行为。

编译器的实际操作取决于它,它可能会使用num用于num之前未使用的另一个局部变量的存储。然后使用pointer获取num肯定会失败的值。

答案 1 :(得分:1)

不,它可能无法正常工作,因为您试图保持超出范围的对象的值以及它所属的堆栈帧将被销毁。这可能会工作一次或两次,但它始终是未定义的行为。