鱼C论坛

 找回密码
 立即注册
查看: 2655|回复: 2

[吹水] 哈哈,突然发现很严重的问题

[复制链接]
发表于 2023-1-9 23:23:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以前写scanf()函数的时候经常忘记写取址符号
像这样
  1. ...
  2. int a;
  3. scanf("%d",a);
  4. ...
复制代码

我在想,这样写会导致什么行为呢?
虽然这个 a 呢,他是一个整型变量,但他有没有可能会被读作一个指针,从而改变这个内存
这样不就完了吗?

但是我以前试过好几次都没有发现问题,应该不是我想的那样吧。那么应该是什么样呢~

(这是一个萌新的主观臆想)
(大佬勿喷

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-10 08:57:15 | 显示全部楼层
大多数情况下  就只是无法取到正确数据
或许有少数情况也会出现崩溃现象

评分

参与人数 1鱼币 +1 收起 理由
额外减小 + 1 谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-10 10:12:31 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2023-1-10 10:15 编辑

      这样写的结果,a 确实会被当做一个指针,会尝试把从键盘读到的数据(4个字节)写入 a 值所指向的存储单元,但是,每台电脑可供使用的内存地址是有一个数值范围的,如果 a 值恰好在这个数值范围内,那么,函数可以被正常执行,只是其它变量会被侵害,而且,变量 a 也无法如预期那样取到键盘输入数值;如果 a 值不在可用内存地址范围以内,那么,调用 scanf() 函数,程序会因为访问无效内存地址而崩溃。

评分

参与人数 1荣誉 +1 收起 理由
额外减小 + 1 谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 16:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表