是否可以在C / C ++中访问局部变量的内存?

让我们看一个示例,您可能可以访问超出其范围的局部变量的内存。

示例

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

int main() {
   int* address = foo();
   cout << *address;
   *address = 12;
   cout << *address;
}

输出结果

这可能会给出输出-

3
12

如前 ,此代码可以正常工作。我们只是在读取和写入内存,将USED用作x的地址。总的来说,您超出了foo的范围,该地址是指向某个随机内存区域的指针。在上面的示例中,该内存区域确实存在,并且此刻没有其他任何东西在使用它。您不会通过继续使用而破坏任何内容(不会使用另一个进程的存储区或任何其他未授权的存储区),并且还没有其他东西覆盖它。因此,3仍然存在。

在真实的程序中,该内存可能几乎立即被重用,并且您可能会通过诸如此类的操作破坏某些内容。这样的内存访问错误很难跟踪和消除。

当您从foo返回时,程序会告诉OS X的内存已不再使用,可以将其重新分配给其他对象。如果您很幸运并且重新分配了它,并且操作系统没有再吸引您使用它,那么您就可以摆脱它。