假设我使用此代码:
int *pointer;
if(1) {
int num = 5; // local variable, can't be used outside the if block.
pointer = &num
}
这是一种跟踪num
变量的安全方法吗?我知道这段代码会起作用。但我认为编译器将使用旧的num
内存来分配新变量,导致pointer
引用不可预测的值。这是真的吗?
答案 0 :(得分:11)
不,这不安全。当达到}
的结束if
时,num
的生命周期结束,pointer
的值变得不确定。之后使用它会调用未定义的行为。
编译器的实际操作取决于它,它可能会使用num
用于num
之前未使用的另一个局部变量的存储。然后使用pointer
获取num
肯定会失败的值。
答案 1 :(得分:1)
不,它可能无法正常工作,因为您试图保持超出范围的对象的值以及它所属的堆栈帧将被销毁。这可能会工作一次或两次,但它始终是未定义的行为。