程序中访问空指针为什么会出错?
2014-05-11 20:43
239 查看
程序中,访问空指针会出现段错误。这是由于硬件地址保护方式和内核中设置的页全局目录表造成的。
程序中出现的地址,一般都是逻辑地址,经分段单元转换为线性地址,线性地址经分页单元转换成物理地址,然后可以获得物理内存中的数据。在内核初始化阶段,会对页全局目录表初始化,将页全局目录表中的第一项设为0。根据目录项的各个相关标志位(User/Supervisor被设为0),可知只有处于内核态时才可以访问该目录项对应的地址。在用户态,当用户程序访问一个空指针时,就会造成一个硬件保护错误。说明访问的地址不在地址空间中。
全局目录表中的第一项为0,对4G的内存且地址为三部分的分配策略,即10+10+12的分配方式,可知如果线性地址的前22位为0,那么访问4M之内的地址空间都会引起一个访问保护性错误。
另,内核态有对这样地址的访问权限,不会引起访问保护错误。
目前暂无进一步研究。
程序中出现的地址,一般都是逻辑地址,经分段单元转换为线性地址,线性地址经分页单元转换成物理地址,然后可以获得物理内存中的数据。在内核初始化阶段,会对页全局目录表初始化,将页全局目录表中的第一项设为0。根据目录项的各个相关标志位(User/Supervisor被设为0),可知只有处于内核态时才可以访问该目录项对应的地址。在用户态,当用户程序访问一个空指针时,就会造成一个硬件保护错误。说明访问的地址不在地址空间中。
全局目录表中的第一项为0,对4G的内存且地址为三部分的分配策略,即10+10+12的分配方式,可知如果线性地址的前22位为0,那么访问4M之内的地址空间都会引起一个访问保护性错误。
另,内核态有对这样地址的访问权限,不会引起访问保护错误。
目前暂无进一步研究。
相关文章推荐
- YTU 2832: 使用指针访问数组元素--程序填空
- Problem B: 使用指针访问数组元素--程序填空
- 访问Excel 2007出错,未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
- 运行启动项目时出错:无法启动程序......,拒绝访问
- IIS建立新网站出错-另一个程序正在使用此文件,进程无法访问
- 程序网络访问出错:lacked sufficient buffer space
- 运行android程序访问网络,出错,需要加上权限
- 为什么下面的程序要a b c的地址赋给指针p p1 p2?
- IIS虚拟目录内的视频文件访问出错:HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 第三周程序阅读(2) 利用指针访问私有数据成员
- 指针方面的问题,此程序调试显示是正确的,但是运行起来的结果是错误的为什么?求解
- 通过指针访问值之程序声明一个指针和一个变量,然后输出它们的地址和它们所含的值
- VS2005+ACCESS WEB程序出错数据访问权限错误的解决方法
- rpt 内出错:拒绝访问报表文件。其他程序可能正在使用它。
- Web报表导出与“.rpt 内出错:拒绝访问报表文件。其他程序可能正在使用它”之我解
- VS2005+ACCESS WEB程序出错数据访问权限错误的解决方法
- 关于asp.net web程序的访问,为什么老提示输入用户名和密码?
- 为什么*.ashx一般处理程序不能访问Session值?
- Silverlight程序发布到IIS后访问出错
- Enterprise Library3.1 使用数据访问模块时,调用Microsoft.Practices.EnterpriseLibrary.Data报出源文件与当前应用程序不一致和创建dataconfiguration的配置节处理程序出错