访问超出其边界的数组(在 C 中)有多危险?有时可能会发生我从数组外部读取的情况(我现在明白我会访问程序的其他部分甚至超出该部分使用的内存),或者我试图为数组外部的索引设置一个值。该程序有时会崩溃,但有时只是运行,只会给出意想不到的结果。
现在我想知道的是,这到底有多危险?如果它损坏了我的程序,那还不错。另一方面,如果它破坏了我的程序之外的某些东西,因为我以某种方式设法访问了一些完全不相关的内存,那么我想这是非常糟糕的。我读了很多“任何事情都可能发生”、“分段可能是最不严重的问题”、“你的硬盘可能会变成粉红色,而独角兽可能会在你的窗户下唱歌”,这些都很好,但真正的危险是什么?
我的问题:
- 除了我的程序之外,从数组外部读取值会损坏任何东西吗?我想只看东西不会改变任何东西,或者它会改变我碰巧到达的文件的“上次打开时间”属性吗?
- 除了我的程序之外,在数组之外设置值会损坏任何东西吗?从这个 Stack Overflow question我收集到可以访问任何内存位置,没有安全保证。
- 我现在从 XCode 中运行我的小程序。这是否为我的程序提供了一些额外的保护,使其无法到达自己的内存之外?它会伤害 XCode 吗?
- 关于如何安全地运行我固有的错误代码的任何建议?
我使用 OSX 10.7、Xcode 4.6。