初学者求帮助

wz150715 2017-11-20 04:22:46
我以前也遇到过这样的问题都忘记截图了,这次又刚好遇到这样的问题,,,,,,,,,,,,我知道错误处在scanf哪里,但是我想问为啥弹出这样的界面,一大串代码
...全文
197 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看来已经解决。
赵4老师 2017-11-22
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
scanf函数的内部实现源代码就是crt\src\input.c,你调用scanf,变量前忘加&,导致input.c中的对应语句写非法内存,故弹出input.c,显示写非法内存的那句话。 其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
正解!
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
Larry_666 2017-11-21
  • 打赏
  • 举报
回复
scanf中%d对应的输入变量,需要加& 出现截图二的原因是程序调试遇到问题,到编译的底层,或者汇编
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
scanf函数的内部实现源代码就是crt\src\input.c,你调用scanf,变量前忘加&,导致input.c中的对应语句写非法内存,故弹出input.c,显示写非法内存的那句话。 其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
wz150715 2017-11-21
  • 打赏
  • 举报
回复
我知道错在哪里,我意思是当我调试的时候弹出来了 我想问问这个是什么东西,为什么会弹出来这个,
paschen 2017-11-20
  • 打赏
  • 举报
回复
scanf("%d", year); 改成 scanf("%d", &year);
自信男孩 2017-11-20
  • 打赏
  • 举报
回复
scanf第二个参数应该是地址,即输入的数据写到该地址开始的4个字节里,因为year是int,占4个字节; 但是现在是year,首先定义时,year没有初始化,所以是随机值。那么,若不加&,即想year所在的内存里写数据,year是随机值,这个地址就是year所开始的位置; 建议先把year这个随机值打印出来,建议用%u打印或%x,因为地址是无符号数。看看这个随机值是不是编译器提示的地址值。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧