C++ 变量作用域

标签 c++

我很难记住在 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();

完全没问题。

以下是合法的(作为使用 newmalloc 分配动态内存的替代方法):

int* p = NULL;
{
   static int x = 0;
   p = &x;
}
*p = 0;

关于C++ 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11083549/

相关文章:

c++ - 带 API 的实时频谱分析仪

c++ - 当使用 getline(cin, string) 时,cin 会自动获取它的值而无需询问

c++ - std::cin 中没有匹配 'operator>>' >>

c++ - 在派生类中重载模板运算符

c++ - 制作 :*** [Lab1] Error 1

c++ - Libevent aerospike 客户端::是否可以在我的事件处理机制中注册 Aerospike FD

取消引用指向类成员的指针时发生 C++ 访问冲突

c++ - 我可以在没有底层容器的情况下使用 std::upper_bound 吗?

使用字符拷贝的 C++ 字符串初始化?

Python、C++ 和 Sublime Text 2 : Python. h:没有那个文件或目录