//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中访问该指针是合法的.
添加回答
举报
0/150
提交
取消