相关疑难解决方法(0)

访问数组越界有多危险?

访问其边界之外的数组有多危险(在C中)?有时候我会从数组外部读取(我现在理解我然后访问我的程序的某些其他部分使用的内存,甚至超过它)或者我试图将值设置为数组之外的索引.该程序有时会崩溃,但有时只是运行,只会产生意想不到的结果.

现在我想知道的是,这真的有多危险?如果它损坏我的程序,那就不是那么糟糕了.另一方面,如果它打破了我的程序之外的东西,因为我以某种方式设法访问一些完全不相关的内存,那么它是非常糟糕的,我想.我读了很多"任何可能发生的事情","分割可能是最不好的问题","你的硬盘可能会变成粉红色,独角兽可能会在你的窗下唱歌",这很好,但真正的危险是什么?

我的问题:

  1. 从阵列外部读取值会损坏我的程序之外的任何东西吗?我想象只是看事情不会改变任何东西,或者它会改变我碰巧触及的文件的'last time opened'属性?
  2. 除了我的程序之外,在数组外部设置值可以破坏任何东西吗?从这个 Stack Overflow问题我收集到可以访问任何内存位置,没有安全保证.
  3. 我现在从XCode中运行我的小程序.这是否为我的程序提供了一些额外的保护,它无法到达自己的内存之外?它会伤害XCode吗?
  4. 有关如何安全地运行我的固有错误代码的任何建议?

我使用OSX 10.7,Xcode 4.6.

c memory arrays

219
推荐指数
6
解决办法
5万
查看次数

通过C++标准的下标:legal来获取一个过去的数组元素的地址?

我已经看过它多次断言现在C++标准不允许使用以下代码:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
Run Code Online (Sandbox Code Playgroud)

&array[5]在这种情况下是合法的C++代码吗?

如果可能的话,我想要一个参考标准的答案.

知道它是否符合C标准也很有趣.如果它不是标准的C++,为什么决定做出从不同的治疗呢array + 5还是&array[4] + 1

c c++ standards language-lawyer

75
推荐指数
6
解决办法
6741
查看次数

16
推荐指数
2
解决办法
2760
查看次数

访问超出C和C++限制的数组

int data[8];
data[9] = 1;
Run Code Online (Sandbox Code Playgroud)

c ++标准对此有何评论?这是未定义的行为吗?

至少C编译器(gcc -std = c99 -pedantic -W -Wall)对此没有任何说明.

谢谢.

c c++ arrays undefined-behavior

6
推荐指数
1
解决办法
3720
查看次数