假设我使用此代码:
int *pointer;
if(1) {
int num = 5; // local variable, can't be used outside the if block.
pointer = &num
}
Run Code Online (Sandbox Code Playgroud)
这是一种跟踪num变量的安全方法吗?我知道这段代码会起作用.但我认为编译器将使用旧num内存来分配新变量,从而导致pointer引用不可预测的值.真的吗?
Dan*_*her 11
不,这不安全.当达到收盘}时if,num寿命结束,价值pointer变得不确定.之后使用它会调用未定义的行为.
编译器实际上做了什么取决于它,它可能会使用num用于另一个在生成之前未使用的局部变量的存储num.然后使用pointer获取num肯定会失败的值.