Linux malloc 越界访问为什么不会报错?

zhangyuxiu · 2014年01月27日 · 最后由 jasl 回复于 2014年02月01日 · 8260 次阅读

malloc 40 个字节,访问第 100 个字节的内容,为什么编译器都不会报错。

如下代码: int * p = (int *) malloc(sizeof(int)*5); cout << *(p+100);

结果: 编译器通过检查,结果为 0。

前段时间学习了,说 malloc 只是分配了线性地址,返回值也是线性地址,只有真正访问虚拟地址的时候,才会分配物理地址。malloc 40 个字节,访问第 100 个字节的时候,不会因为没有对应的物理地址而报错么?

在线等,求解啊~

*(p+100) 程序不做越界检查就不会报错...

3 楼 已删除

对于指针来说,这是合法的 在 C 里面,没有绝对的尾巴

实际上内存的最小分配单元是页 (page).

*(p+100) 是在 p 这个基址上偏移 100 个单位长度,malloc 出来的只是这块内存可以安全的使用而已,物理地址任何时候都是存在的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号