2

假设我使用以下代码:

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

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

4

2 回答 2

11

不,这不安全。当达到关闭}ifnum的生命周期结束,并且 的值pointer变得不确定。此后使用它会调用未定义的行为。

编译器实际做的事情取决于,它很可能会使用num用于另一个在出现之前未使用的局部变量的存储空间num。然后使用pointer来获取num已经肯定会失败的值。

于 2013-04-13T18:17:28.470 回答
1

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

于 2013-04-13T18:17:46.717 回答