返回本地变量和程序的地址仍然有效

时间:2016-10-07 06:10:04

标签: c++

让我们说这是我想谈的快照。在此代码中,主函数调用' foo'返回本地声明的变量' a'的地址。我的印象是,本地声明的变量在超出范围时会重新分配内存。变量' a'应该在调用foo之后取消分配,并且不应该有任何与“a”相关的内容。但在这种情况下,似乎打破了这个基本假设。下面发生了什么?

{{1}}

2 个答案:

答案 0 :(得分:4)

您的代码调用未定义的行为。恰如其命名,它没有定义,这意味着你可能得到预期的结果,或者你可能没有。你应该做的不是依靠这样的结果,因为它们没有明确的定义。你可能会因为获得预期的结果而感到幸运,但请相信我,这是一个陷阱!

答案 1 :(得分:0)

这取决于您的机器/编译器打印的值。堆栈的重新分配并不意味着早先被删除的东西。这只意味着该区域已变得无效。这意味着当您尝试访问这些地址时,无法保证行为。在您的情况下,恰好用于存储局部变量a的位置没有被覆盖。