猿问

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

//samplecode1
#include
#defineLEN41
structbook{
chartitle[LEN];
charauthor[LEN];
}
intmain(){
structbook*b;//有意义的指针
printf("Enterthebooktitle:");
scanf("%40s",b->title);
printf("Enterthebookauthor:");
scanf("%40s",b->author);
return0;
}
//samplecode2
#include
#defineLEN41
structbook{
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指针。。求解。
慕斯王
浏览 326回答 2
2回答

SMILET

第一段程序你结构体指针没初始化,b根本就是的野指针嘛,你程序能运行时因为野指针恰好没影响到程序的运行;第二段函数中返回结构体指针,main函数若是处理该给指针就属于越界操作.你通过malloc创建结构体,会在内存中段空间就开辟了这段内存.只要你没有free这段内存就会一直存在,因此在mian中访问该指针是合法的.
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答