指针数组不会报越界错误。

代码如下,我定义的数组长度是3, 为什么我可以在for循环中无错误地访问p[3]呢?不应该最多访问到p[2]吗?

也就是说,越界1位不会报错,但是超过1位就会报错了。

求大佬解释。

#include<iostream>
using namespace std;

int main(int argc, char *argv[])
{
    int* p[3];
    p[0] = new int(0);
    p[1] = new int(1);
    p[2] = new int(2);
    p[3] = new int(3); // 为什么不会报越界错误?而且后面访问p[3]也不会报错。

    //p[1000] = new int(888); // 也不会报错,但是如果访问就会报错。
    for (int i = 0; i < 4; i++) {
        cout << *(p[i]) << endl;
    }
    return 0;
}

上面代码输出:

0
1
2
3

求解释!
为什么p[3]不会越界,而p[4]就会越界?

编译时候不检查数组越界。运行时候就看运气了,可能结果正确,也许得到错误结果,或者缓冲区溢出等等,造成segment fault而崩溃。