加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

指针:尝试通过添加大数字来取消引用指针时读取访问冲突

发布时间:2020-12-16 10:07:53 所属栏目:百科 来源:网络整理
导读:我正在尝试更多地探索指针,下面是我正在尝试的一段示例代码 这有效: int *arth,art;art = 100;arth = art;printf("arth address is %p arth+1 value is %d",arth,*(arth + 1)); 现在,如果我尝试向关节添加一个大数字,我得到读取访问冲突 这不是: printf("a
我正在尝试更多地探索指针,下面是我正在尝试的一段示例代码

这有效:

int *arth,art;
art = 100;
arth = &art;
printf("arth address is %p arth+1 value is %d",arth,*(arth + 1));

现在,如果我尝试向关节添加一个大数字,我得到读取访问冲突

这不是:

printf("arth address is %p arth+1 value is %d",*(arth + 1000));

错误:

Exception thrown: read access violation.
arth was 0xC9C5EFF964. occurred

问:
有人可以解释为什么在添加1时这是有效的,而不是在添加1000时

解决方法

arth指向int的单个实例.将任何非零值添加到关节并随后取消引用该新指针值将读取原始int范围之外的内存位置.这会调用 undefined behavior.

对于未定义的行为,任何事情都可能发生您的程序可能会崩溃,它可能会输出奇怪的结果,或者它可能似乎正常工作.事实上,你没有在*(关节1))情况下崩溃,但确实在*(关节1000)上崩溃)就是一个例子.

仅仅因为程序没有崩溃并不意味着它没有做错事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读