我在学习操作系统时遇到这个问题,我真的很感兴趣操作系统如何检测数组索引是否超出范围并因此产生分段错误?
int main(){
char* ptr0;
ptr0[0] = 1;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码绝对会产生分段错误,因为 ptr0 没有分配任何内存。
但如果添加一行,情况就会改变。
int main(){
char* ptr0;
char* ptr1 = ptr0;
ptr0[0] = 1;
}
Run Code Online (Sandbox Code Playgroud)
这段代码不会导致任何错误,即使你将ptr0[0]更改为ptr0[1000],它仍然不会导致任何分段错误。
不知道为什么这条线有这么大的力量
char* ptr1 = ptr0
Run Code Online (Sandbox Code Playgroud)
我试图反汇编这些代码,但发现的信息很少。
有人可以从内存分配的角度向我解释一下吗?多谢。