LjMengm 2020-06-29 11:02 采纳率: 100%
浏览 204

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

代码如下,我定义的数组长度是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]就会越界?

  • 写回答

1条回答 默认 最新

  • qiu_shaofeng 2020-06-29 12:23
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料