当前位置: 首页 > 编程笔记 >

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

白云
2023-03-14
本文向大家介绍是否可以在C / C ++中访问局部变量的内存?,包括了是否可以在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的内存已不再使用,可以将其重新分配给其他html" target="_blank">对象。如果您很幸运并且重新分配了它,并且操作系统没有再吸引您使用它,那么您就可以摆脱它。

 类似资料:
  • 问题内容: 我一直在寻找一些Java基本集合(的宝库,fastutil,HPPC)和我已经注意到,类变量有时声明为图案的局部变量。例如: 我已经进行了一些基准测试,看来这样做时速度 稍 快,但是为什么会这样呢?我试图了解如果注释掉函数的前三行,那么Java将有何不同之处。 注意:这似乎与此问题相似,但这是针对c ++的,并且没有解决为什么声明它们的原因。 问题答案: 此处的关键字是红色鲱鱼。之所以

  • 问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地

  • 我有以下几种: 我想调用倒计时方法: 不同物品约10次 方法: 如果调用此方法,则会出现错误: 变量从内部类中访问 我不想将变量设置为final,因为我必须在方法中编辑这些变量。我能做些什么呢?谢谢

  • 问题内容: 如何设置变量,并使其在所有路由中都可用,至少在路由中的文件中可用。使用快速框架和 问题答案: 要创建全局变量,只需声明不带关键字的变量即可。(通常来说,这不是最佳做法,但在某些情况下可能会有用-请小心,因为它将使变量随处可见。) 这是visionmedia / screenshot-app的示例 文件 app.js : 文件 路由/ main.js

  • 问题内容: 我有一个main.c,其全局变量名为。在main()中,我启动一个pthread,它侦听一个TCP连接并通过(progserver.c)运行该线程。意味着,该线程将永远不会返回。在main()中,输入rm.c(RM =资源管理器)中的函数。在rm.c中,我在pthread的progserver.c中读取了此变量的内容(两者均可通过进行访问)。 因此,问题是,当我在pthread中写入并

  • 问题内容: 我正在尝试创建一个JLabel数组,当单击它们时,所有这些标签都应该变为不可见。当试图通过需要访问用于声明标签的循环的迭代变量的内部类设置鼠标侦听器时,就会出现问题。代码是不言自明的: 我以为我可以通过使用内部方法中的(或代替)内部调用来克服此问题,但我一直无法弄清楚。 编译错误是:从内部类内部访问局部变量i;需要宣布为最终` 我敢肯定,答案一定是我从未想过的愚蠢之举,或者我犯了一些小