访问C语言数组时是否超出其边界有多危险?有时我会从数组外部读取(现在我知道我实际上是在访问程序的一些其他部分甚至是超出它们的内存),或者我试图将值设置为数组之外的索引。程序有时会崩溃,但有时仅提供意外结果。
现在我想知道的是,这到底有多危险?如果它只损坏了我的程序,那么就不算太糟糕。另一方面,如果因为我某种方式成功地访问了一些完全无关的内存而破坏了我的程序之外的东西,那么情况就很糟糕了,我想象。
我看到很多“任何事情都可能发生”,“分段可能是最不好的问题”, “您的硬盘可能变成粉色,独角兽可能在您的窗户下唱歌”。这都很好,但真正的危险是什么?
我的问题:
- 从数组外部读取值会除了我的程序之外有任何损害吗?我想仅仅查看东西不会改变任何东西,或者例如,我到达的文件的“上次打开”属性是否会更改?
- 在数组范围之外设置值会除了我的程序之外有任何损害吗?从这个Stack Overflow question中,我得出结论,可以访问任何内存位置,没有安全保障。
- 我现在从XCode中运行我的小程序。这会为我的程序提供一些额外的保护,使其无法超越自己的内存范围吗?它会损害XCode吗?
- 如何安全地运行我的本质上有缺陷的代码的任何建议?
我使用OSX 10.7,Xcode 4.6。