如何使用 C++ 指针访问不同函数中的局部变量?


一旦局部变量超出其作用域,你就无法访问它。这就是局部变量的含义。但是,让我们来看一个你 *可能* 能够在其作用域之外访问局部变量内存的示例。

示例

#include<iostream>
int* foo() {
   int x = 3;
   return &x;
}
int main() {
   int* address = foo();
   cout << *address;
   *address = 12;
   cout << *address;
}

输出

这可能会给出以下输出:

3
12

正如我之前提到的,这段代码 *可能* 会运行。我们只是读取和写入曾经是 x 地址的内存。在 main 函数中,你在 foo 函数的作用域之外,该地址是指向某个随机内存区域的指针。在上面的示例中,该内存区域确实存在,并且目前没有任何其他内容正在使用它。你继续使用它不会破坏任何东西(你不会使用另一个进程的内存区域或任何其他未经授权的内存区域),并且没有任何其他内容覆盖它。因此,3 仍然在那里。

在一个真实的程序中,该内存可能几乎立即被重新使用,如果你这样做,你可能会破坏某些东西。这种内存访问错误非常难以追踪和解决。

当你从 foo 函数返回时,程序会告诉操作系统 x 的内存不再被使用,可以重新分配给其他内容。如果你幸运,它被重新分配,并且操作系统没有发现你再次使用它,那么你就可以逃过一劫。

更新于:2020年6月24日

1K+ 次查看

启动你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.