给初始化为NULL的结构体指针赋值报错问题

Castiellee929 2019-03-30 09:13:32

这里为什么会报这个错误呀
...全文
1123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CH_GOGO 2019-03-31
  • 打赏
  • 举报
回复
tmp是NULL的时候,指向安全区域,你解引用就会错误。你申请空间时,因为tmp指向堆空间的申请的区域,是可以解引用的。还有如果你不给申请的指针赋值,然后解引用的话,因为指针指向的是未知区域,也是危险的,回错误。要解引用一个指针,首先指针不能指向安全区域了,然后还不能是指向未知区域。
@风轻云淡_ 2019-03-30
  • 打赏
  • 举报
回复
搜索一下空指针、野指针相关知识,指针在C语言中的地位是重中之重,在C++中也是不可或缺的。
奚晓华 2019-03-30
  • 打赏
  • 举报
回复
tmp指向null,使用*tmp就会报错,因为这代表要去0的地址取数据,0地址是不允许访问的,所以会报错,换成malloc后,系统会分配可使用的地址给tmp,所以*tmp就不会报错
Castiellee929 2019-03-30
  • 打赏
  • 举报
回复

Teacher *tmp = NULL;
改为
Teacher *tmp = (struct Teacher *)malloc(sizeof(struct Teacher));
就不会报错了
但是不知道为啥。
而且
在除了主函数之外的函数体中,定义的结构体变量和结构体指针变量都必须得赋值,否者会报错。
求大佬解答
奚晓华 2019-03-30
  • 打赏
  • 举报
回复
tmp是null,不能使用*tmp,建议tmp声明为Teacher tmp,下面的*tmp都变为tmp即可

65,170

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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