是否可以在C / C ++中访问局部变量的内存?
让我们看一个示例,您可能可以访问超出其范围的局部变量的内存。
示例
#include<iostream>int* foo() {
int x = 3;
return &x;
}
int main() {
int* address = foo();
cout << *address;
*address = 12;
cout << *address;
}
输出结果
这可能会给出输出-
312
如前 ,此代码可以正常工作。我们只是在读取和写入内存,将USED用作x的地址。总的来说,您超出了foo的范围,该地址是指向某个随机内存区域的指针。在上面的示例中,该内存区域确实存在,并且此刻没有其他任何东西在使用它。您不会通过继续使用而破坏任何内容(不会使用另一个进程的存储区或任何其他未授权的存储区),并且还没有其他东西覆盖它。因此,3仍然存在。
在真实的程序中,该内存可能几乎立即被重用,并且您可能会通过诸如此类的操作破坏某些内容。这样的内存访问错误很难跟踪和消除。
当您从foo返回时,程序会告诉OS X的内存已不再使用,可以将其重新分配给其他对象。如果您很幸运并且重新分配了它,并且操作系统没有再吸引您使用它,那么您就可以摆脱它。
以上是 是否可以在C / C ++中访问局部变量的内存? 的全部内容, 来源链接: utcz.com/z/327193.html