您的位置:首页 > 其它

程序中访问空指针为什么会出错?

2014-05-11 20:43 239 查看
程序中,访问空指针会出现段错误。这是由于硬件地址保护方式和内核中设置的页全局目录表造成的。

程序中出现的地址,一般都是逻辑地址,经分段单元转换为线性地址,线性地址经分页单元转换成物理地址,然后可以获得物理内存中的数据。在内核初始化阶段,会对页全局目录表初始化,将页全局目录表中的第一项设为0。根据目录项的各个相关标志位(User/Supervisor被设为0),可知只有处于内核态时才可以访问该目录项对应的地址。在用户态,当用户程序访问一个空指针时,就会造成一个硬件保护错误。说明访问的地址不在地址空间中。

全局目录表中的第一项为0,对4G的内存且地址为三部分的分配策略,即10+10+12的分配方式,可知如果线性地址的前22位为0,那么访问4M之内的地址空间都会引起一个访问保护性错误。

另,内核态有对这样地址的访问权限,不会引起访问保护错误。

目前暂无进一步研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐