【发布时间】:2011-02-10 00:10:36
【问题描述】:
void someFunc()
{
int stackInt = 4;
someOtherFunc(&stackInt);
}
stackInt 的地址空间是否可以在 someFunc 结束后重新分配,从而假设传递给 someOtherFunc 的值代表传递给它的值为 4 的 stackInt 变量是不安全的?换句话说,我是否应该避免通过地址传递堆栈变量并期望它们在初始化它们的函数结束后仍然存在?
【问题讨论】:
-
如果我错了,请有人纠正我,但是将
stackInt的地址传递给someOtherFunc不安全吗?只有在 someFunc 返回后才会重新分配空间 - 这仅在 someOtherFunc 返回后才会发生。问题仅在于返回堆栈变量的地址。因此,如果你从someFunc返回&stackInt,你就是在招惹麻烦——否则你是安全的。 -
您通常是对的,但您可以想象 someOtherFunc 将指针隐藏在某处(例如全局变量)的代码,这样即使在 someOtherFunc 返回后也有对它的引用。这就是你遇到问题的地方。
-
@nall 谢谢你:)