如何使用 C++ 指针从不同的函数访问局部变量?
一旦超出范围,您将无法访问局部变量。这就是成为局部变量的含义。不过,让我们看一个示例,您可能能够在其范围之外访问局部变量的内存。
示例
#include输出结果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的内存不再被使用,它可以重新分配给其他东西。如果你很幸运并且它被重新分配,并且操作系统没有发现你再次使用它,那么你可以逃脱它。