为了账号安全,请及时绑定邮箱和手机立即绑定

C语言声明结构的指针的问题。

C语言声明结构的指针的问题。

慕斯王 2019-04-16 20:27:51
//samplecode1#include#defineLEN41structbook{chartitle[LEN];charauthor[LEN];}intmain(){structbook*b;//有意义的指针printf("Enterthebooktitle:");scanf("%40s",b->title);printf("Enterthebookauthor:");scanf("%40s",b->author);return0;}//samplecode2#include#defineLEN41structbook{chartitle[LEN];charauthor[LEN];}structbook*newBook();intmain(){structbook*b;//有意义的指针b=newBook();return0;}structbook*newBook(){structbook*temp;//NULL指针,为何?printf("Enterthebooktitle:");scanf("%40s",temp->title);printf("Enterthebookauthor:");scanf("%40s",temp->author);returntemp;}为什么上面两段代码,第一段可以跑,第二段在跑newBook()的时候就会报Segmentationfault..后来我在第二段代码中用structbook*temp=(structbook*)malloc(sizeof(structbook));之后第二段就不会报错了。。就有个疑问了。在第一段代码main中定义的book结构指针。这个指针是个有意义的指针。但是到了第二段代码的newBook方法中定义的话,就会是NULL指针。。求解。
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

第一段程序你结构体指针没初始化,b根本就是的野指针嘛,你程序能运行时因为野指针恰好没影响到程序的运行;
第二段函数中返回结构体指针,main函数若是处理该给指针就属于越界操作.
你通过malloc创建结构体,会在内存中段空间就开辟了这段内存.只要你没有free这段内存就会一直存在,因此在mian中访问该指针是合法的.
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 325 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信