社区
C语言
帖子详情
空指针操作,出错的本质是什么?
#Page#
2011-12-01 02:55:06
PC的有保护,可能是0地址不在用户态什么的,本质是?
而在嵌入式,0地址可能是CPU第一个运行的地址,读应该是没问题的,但写为什么出错?本质是什么?
我的本意:如何在写0地址出错时打印一些信息!别挂了还找半天~~~~
...全文
567
25
打赏
收藏
空指针操作,出错的本质是什么?
PC的有保护,可能是0地址不在用户态什么的,本质是? 而在嵌入式,0地址可能是CPU第一个运行的地址,读应该是没问题的,但写为什么出错?本质是什么? 我的本意:如何在写0地址出错时打印一些信息!别挂了还找半天~~~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hejian1106
2012-12-31
打赏
举报
回复
至于为什么没有物理内存与这块内存建立映射,这是操作系统的原因。。。。你可以不用去管他,了解就行
hejian1106
2012-12-31
打赏
举报
回复
本质就是 没有物理内存映射到所指向的那块虚拟地址啊
#Page#
2012-11-14
打赏
举报
回复
都没有回答到本质,19楼说的还可以
robin97
2011-12-04
打赏
举报
回复
0地址,呵呵,可以访问的,你所说的那些情况,是由于没有建立页面映射以及特权级别限制造成,哪有访问不了的地方啊,限制你访问而已。
天云
2011-12-03
打赏
举报
回复
[Quote=引用 8 楼 anyidan 的回复:]
本质 是享受自由的前提是必须受到 约束
[/Quote]
++
cao_julians
2011-12-03
打赏
举报
回复
研究问题应该有“层次”概念:
C语言实际上建立在一个抽象的层次上,它没有涉及某一个具体的硬件结构(C语言的宗旨之一就是通用--通用于任何计算机),对NULL而言,只是表示地址范围中的一个特殊点,它不可访问--表示无效地址。
至于它是不是0,0地址处是什么?这就要涉及到具体的计算机硬件结构了,这是另一个层次的问题了。
一个具体的编译器负责NULL与一个具体硬件结构地址的关联。没有记错的话,看看“C的495个问题”
windman521
2011-12-03
打赏
举报
回复
本质 就是你只能在自己家里胡作非为。OVER。
「已注销」
2011-12-03
打赏
举报
回复
[Quote=引用 15 楼 zichen0422 的回复:]
NULL指针跟0地址是有区别的!
[/Quote]
请问:有什么区别?
dic_008
2011-12-02
打赏
举报
回复
0--64K这段内存就不能访问
wang0635
2011-12-02
打赏
举报
回复
空指针到底是什么地址,由编译器确定
源代码中可以写作 ( XXX *)0
「已注销」
2011-12-02
打赏
举报
回复
本质是保护模式的保护。
赵4老师
2011-12-02
打赏
举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]
内存管理、虚存管理、缺页中断……
内存区段、CPU的段寄存器、区段的访问权限RWX、越权访问触发的中断……
[/Quote]
正解!(^_^)
zichen0422
2011-12-02
打赏
举报
回复
NULL指针跟0地址是有区别的!
bEst_02
2011-12-02
打赏
举报
回复
如果想查找异常的地方,使用异常处理函数就可以了。函数里面打印异常代码以及其他等
zhusizhi007
2011-12-02
打赏
举报
回复
只是一种预定义的错误状态,而0又是最好的备选,实际上,0地址是可以转化为函数指针的,在汇编里面。。
狂且
2011-12-02
打赏
举报
回复
这个地址是受操作系统保护的, 有的机器还特意加了硬件级的保护. 想写几乎是不可能的.
根据5 楼提示, 俺也去学习.
CoolEgos
2011-12-02
打赏
举报
回复
[Quote=引用 1 楼 demon__hunter 的回复:]
win32位每个进程的地址空间里,开始内存地址空间里设置了一个分区,范围是0x00000000~0x0000ffff,如果进程中有线程试图读写这段区域,cpu就会引发非法访问的。
[/Quote]嗯嗯
AnYidan
2011-12-01
打赏
举报
回复
本质 是享受自由的前提是必须受到 约束
catmonkeyxu
2011-12-01
打赏
举报
回复
每个进程的最前面一段地址,是完全不可访问的,不光是不能写,读也不可以
guzhijie1981
2011-12-01
打赏
举报
回复
楼主还是看看intel cpu的体系架构吧,还有就是OS原理,
另外空指针,未必表述指向0地址的指针,
还有就是,要知道地址在逻辑上是连续的,并不代表在实际上是连续的,比如说你的2片128m内存,他们可能占据了其实的128m和32bit地址最后的128m,何况很多概念上的地址是分配给其他硬件的。
我们无法确定0地址是否真正存在,所以我们更加无法知道空指针到底表示什么地址。
另外嵌入式的处理器,多数不是从0地址开始执行第一条指令的,这个和体系有关,而且现在多数的嵌入式处理器带linux操作系统 的,所以应用程序是有OS来管理的。空指针的问题,多数是OS来管理,
加载更多回复(5)
精通C语言指针
指针被誉为C语言的精髓、C
本质
上是加了一层语法糖的汇编,引进当时先进的函数,保留了汇编强大的地址直接访问功能 —— 指针,使其高效灵活。本课程是黄强老师对于指针的一次专题讲解,相信能给大家带来收获!
空指针
、悬
空指针
、野指针
文章目录前言一、指针?二、指针的应用场景三、
空指针
四、 野指针正确用法总结 前言 相信很多小伙伴对指针的使用都有一定的了解了。但更多的人可能对指针又爱又恨。这次我们谈点重要的,进一步加深对指针的理解 一、指针? 指针是一种特别变量,全称是指针变量,专用于存放其它变量在内存中的地址编号。把指针指向具体的内存变量的地址,就是对指针赋值。 二、指针的应用场景 用作函数的参数传递和函数的返回值。 利用指针传递参数,可避免变量复制,减少内存开销,提高效率。 三、
空指针
没有赋值的指针变量(没有指向内存变量的
关于
空指针
(指针指向为NULL)和void类型的指针的理解
正在学C,书上老说
空指针
,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底
空指针
的意思是指指向地址为空的类型呢,还是指void类型的指针呢(1)
空指针
所对应的是指指向的对象为空的指针。 不经发问,什么叫指向为空呢?要理解这点,必须理解如下几点(有点啰嗦,但很细,别嫌我烦):(a)任何指针都有类型(说穿了指针都是变量,只不过变...
【C++】
空指针
调用成员函数及访问成员变量
最近在review代码的时候发现,使用了
空指针
调用成员函数,并且成员函数内部有使用到成员变量,居然没有
出错
。很是奇怪,就用一篇博客把关于
空指针
调用成员函数相关的内容总结起来。 本文实例源码github地址:https://github.com/yngzMiao/yngzmiao-blogs/tree/master/2020Q4/20201231。
空指针
调用成员函数 调用普通成员函数 如果
空指针
调用普通成员函数,看该函数体中是否使用到了this指针(是否访问非静态成员变量)。如果使用到了this指针,程序
C语言在干手器中起什么作用,在C语言中什么是指针?指针是干什么用的?,有什么意义?...
Joel Spolsky认为,对指针的理解是一种aptitude,不是通过训练就可以达到的。虽然如此,我还是想谈一谈这个C/C++语言中最强劲也是最容易
出错
的要素。鉴于指针和目前计算机内存结构的关联,很多C语言比较
本质
的特点都孕育在其中,因此,本篇和第六、第七两篇我都将以指针为主线,结合在实际编程中遇到的问题,来详细谈谈关于指针的几个重要方面。指针类型的
本质
分析1、指针的
本质
指针的
本质
:一种复合的...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章