malloc 40 个字节,访问第 100 个字节的内容,为什么编译器都不会报错。
如下代码: int * p = (int *) malloc(sizeof(int)*5); cout << *(p+100);
结果: 编译器通过检查,结果为 0。
前段时间学习了,说 malloc 只是分配了线性地址,返回值也是线性地址,只有真正访问虚拟地址的时候,才会分配物理地址。malloc 40 个字节,访问第 100 个字节的时候,不会因为没有对应的物理地址而报错么?
在线等,求解啊~
*(p+100) 程序不做越界检查就不会报错...
*(p+100)
对于指针来说,这是合法的 在 C 里面,没有绝对的尾巴
实际上内存的最小分配单元是页 (page).
*(p+100) 是在 p 这个基址上偏移 100 个单位长度,malloc 出来的只是这块内存可以安全的使用而已,物理地址任何时候都是存在的