纠结在空指针上
时间:2011-12-13
来源:互联网
我们知道空指针就是没有指向任何对象的指针,这个是通过其值来判断的,即,赋值NULL
X *p = NULL;
NULL是一个宏,实际等于0,假设一个对象分配的地址刚好在0处呢?
X *p = NULL;
NULL是一个宏,实际等于0,假设一个对象分配的地址刚好在0处呢?
作者: yusss 发布时间: 2011-12-13
这种情况是不会出现的,根据微机原理的知识,内存的前n个单元用来放的是中断向量,这些地址的访问由硬件完成;当然操作系统能够可以修改这些空间的值,但是用户程序是不可能用到的。
作者: nuaazdh 发布时间: 2011-12-13
有些地址是受保护的
作者: ouyh12345 发布时间: 2011-12-13

你咋怎么纠结呢~
X *p指的是给p的内存编号假设为0x1000,而给他如果赋值的话,是将那个值的内存地址赋予0x1000这个地方,而将p=NULL,的意思是给0x1000=NULL,NULL的值在很多情况下是0,它就指向了第0个编号的内存地址,此时,这个指针和所指向的内存单元是有意义的,但是,基本上所有的操作系统中,第0个字节的内存都是处于存放系统内核的区域内的,是不能让用户直接访问和读写的,所以,使用一个值为NULL的指针(即它指向第0字节的内存)会产生如:"XXX所引用的内存地址0X0000不能为READ"之类的错误.这个错误是操作系统的保护机制在起作用.
这也就是说NULL值不一定要定义成0,起始只要定义在系统的保护范围的地址空间内,比如定义成(0x00000001, 0x00000002)都会起到相同的作用,但是为了考虑到移植性,普遍定义为0 。
作者: hackhat 发布时间: 2011-12-13
建议你去看看操作系统的书,内存管理映射分页等等机制都在限制着你对内存的访问,做为一个应用程序,其实你对内存访问的地址都是映射地址,不是实际地址。很多情况下,0x00000000对应用程序来说,不光是不能访问,而且是根本就没有这个映射地址。
作者: feidaosh 发布时间: 2011-12-13
如果操作系统由你来写,你才可能为所欲为。
作者: pathuang68 发布时间: 2011-12-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28