【发布时间】:2021-11-29 07:20:26
【问题描述】:
访问超出其边界的数组(在 C 中)有多危险?有时可能会发生我从数组外部读取的情况(我现在明白我然后访问了我的程序的某些其他部分甚至超出该部分使用的内存),或者我试图为数组外部的索引设置一个值。该程序有时会崩溃,但有时只是运行,只会给出意想不到的结果。
现在我想知道的是,这到底有多危险?如果它损坏了我的程序,那还不错。另一方面,如果它破坏了我的程序之外的某些东西,因为我以某种方式设法访问了一些完全不相关的内存,那么我想这是非常糟糕的。 我读了很多“任何事情都可能发生”,'segmentation might be the least bad problem',“你的硬盘可能会变成粉红色,独角兽可能会在你的窗下唱歌”,这些都很好,但真正的危险是什么?
我的问题:
- 从数组外部读取值会损坏任何东西 除了我的程序?我会想象只是看东西 不改变任何东西,或者它会例如改变'最后一次 我碰巧到达的文件的opened'属性?
- 在数组之外设置值是否会损坏除我之外的任何东西 程序?由此 Stack Overflow question我认为可以访问 任何内存位置,都没有安全保证。
- 我现在从 XCode 中运行我的小程序。这样做 在我的程序无法提供的地方提供一些额外的保护 到达自己的记忆之外?它会损害 XCode 吗?
- 关于如何安全地运行我固有的错误代码有什么建议吗?
我使用 OSX 10.7、Xcode 4.6。
【问题讨论】:
-
一般来说,操作系统会保护自己和其他进程免受您的不当行为。不过,您不一定要严重依赖它。
-
此外,当访问和数组索引越界(在您的内存中)时,您永远不会“碰巧到达”硬盘上的文件。
-
我相信你问的是 C 数组,对吧?所以这与 ObjC 无关,也与任何 IDE 无关。
-
这是我的favorite example 奇怪的结果(它处理堆栈,但我发现它真的很有启发性......)。