数组值为负数

时间:2014-02-05 21:38:12

标签: c++ arrays overflow

是否有任何重新限制在数组中存储的值为-1?它会以一种糟糕的方式影响程序或计算机吗?我很好奇,我是编程的新手,任何澄清我都能得到真正的帮助,谢谢。

2 个答案:

答案 0 :(得分:7)

无法在索引-1的数组对象中存储任何内容。仅仅尝试获取指向该不存在元素的指针会导致未定义的行为。

在基本指针不是数组对象本身的情况下,负数索引(如-1)可能出现在类似数组的上下文中,而是指向另一个数组对象中间的独立指针,如

int a[10];
int *p = &a[5];

p[-1] = 42; // OK, sets `a[4]`
p[-2] = 5; // OK, sets `a[3]`

但是,在实际数组开始之前访问不存在的元素的任何尝试都会导致未定义的行为

a[-1]; // undefined behavior
p[-6]; // undefined behavior

答案 1 :(得分:0)

你看是否试图通过在括号中指出一些值来获取数组元素,基本上你是从内存地址指定偏移量(乘以分配类型的大小)。如果您以int *a = new int[N]这样的典型方式分配了数组,则允许使用的内存仅限于地址a,直到a + <size of memory allocated>(在本例中为sizeof (int) * N) ,所以通过尝试使用索引-1获取值,您将超出数组的范围,它肯定会导致错误或程序崩溃。

当然有可能你的内存指针不是某个分配序列开头的那个,比如(考虑前面的例子)int *b = a + 1,在这种情况下你可能(至少编译器允许)取值a[-1]并且它是有效的,但由于很难像这样管理代码的正确性,我仍然建议不要这样做。