可能重复:
无效的读/写有时会产生分段错误,有时不会
我正在用 malloc 做一些实验,并在 linux m/c 上编写了这个非常小的程序:
int main(){
int *p=NULL;
p = (int *)malloc(10);
*(p + 33*1000) = 5;
free(p);
return 0;
}
该程序没有给出分段错误,但如果我将第 5 行更改为此 *(p + 34*1000) = 5; 然后它给出了分段错误。在我的系统上,页面大小为 4K。
我无法解释为什么它在 p 之后在大约 128Kb(34*1000 大约是 128K)处给出分段错误。
如果有人可以从 linux 内存管理的角度来解释这一点,那就太好了。