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

zhangyuxiu · January 27, 2014 · Last by jasl replied at February 01, 2014 · 8268 hits

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

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

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

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

在线等,求解啊~

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

3 Floor has deleted

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

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

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

You need to Sign in before reply, if you don't have an account, please Sign up first.