Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我使用以下代码:
int *pointer; if(1) { int num = 5; // local variable, can't be used outside the if block. pointer = &num }
这是跟踪num变量的安全方法吗?我知道这段代码会起作用。但我认为编译器会使用旧num内存分配新变量,导致pointer引用不可预测的值。真的吗?
num
pointer
不,这不安全。当达到关闭}时if,num的生命周期结束,并且 的值pointer变得不确定。此后使用它会调用未定义的行为。
}
if
编译器实际做的事情取决于,它很可能会使用num用于另一个在出现之前未使用的局部变量的存储空间num。然后使用pointer来获取num已经肯定会失败的值。
不,它可能不起作用,因为您试图保持超出范围的对象的值并且它所属的堆栈帧将被销毁。这可能会工作一次或两次,但它始终是未定义的行为。