我很难记住在 C++ 中定义在 block 中的局部(非静态,并且在 block 内)变量是否被销毁,只要指针指向它,即使在执行离开 block 之后也是如此。 因此,如果我在一个 block 内创建了一个 int,并拥有一个全局指针,然后我离开了该 block ,我的指针还能找到那个 int 吗?
我没有在网上找到明确的答案,虽然可能已经不止一次回答过,对此感到抱歉。
最佳答案
不,您处于未定义的行为区域。
我假设你的意思是这样的:
int* p = NULL;
{
int x = 0;
p = &x;
}
//p is a dangling pointer
如果你试图在 之后取消引用
p
,你会遇到麻烦(或者,更糟的是,你不会遇到麻烦,但它看起来像是在工作)。
但是你可以重新分配指针,比如
p = new int();
完全没问题。
以下是合法的(作为使用 new
或 malloc
分配动态内存的替代方法):
int* p = NULL;
{
static int x = 0;
p = &x;
}
*p = 0;
关于C++ 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11083549/