是否可以在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的内存已不再使用,可以将其重新分配给其他对象。如果您很幸运并且重新分配了它,并且操作系统没有再吸引您使用它,那么您就可以摆脱它。

以上是 是否可以在C / C ++中访问局部变量的内存? 的全部内容, 来源链接: utcz.com/z/327193.html

回到顶部