歡迎您光臨本站 註冊首頁

求解:關於帶頭結點鏈表初始化的 問題

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

代碼如下:
學生管理信息
STU:學生信息結構體
問題出在初始化部分
CODE:
#define LEN sizeof(struct stu_info)

typedef struct stu_info
{
char name[20];
long num;
float math_score;
float C_score;
float Eng_score;
struct stu_info *next;
}STU;

STU * Stu_list_Init(STU *L)//初始化鏈表 //有問題!!!!!!!!!!!!!!為什麼需要有返回值 才能正確運行
{
STU *p;
p=L;
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申請空間失敗!");
exit(0);
}
p->next=NULL;
return L;
}

void Creat_list(STU *L)//創建鏈表
{
STU *tail,*p;
tail=L;
puts("Input students info:");
while(1)
{
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申請空間失敗!");
exit(0);
}
printf("\t\tname:");
scanf("%s",p->name);

if(strncmp(p->name,"end",3)==0)
{
free(p);
break;
}
printf("\t\tnumber:");
scanf("%ld",&p->num);
printf("\t\tmath:");
scanf("%f",&p->math_score);
printf("\t\tC:");
scanf("%f",&p->C_score);
printf("\t\tEng:");
scanf("%f",&p->Eng_score);

p->next=NULL;
tail->next=p;
tail=p;
}
tail->next=NULL;
fflush(NULL);
}
int main()
{
struct stu_info *stu;
stu=Stu_list_Init(stu);
Creat_list(stu);
return 0;
}

在鏈表初始化部分
CODE:
STU * Stu_list_Init(STU *L)//初始化鏈表 有返回值
{
STU *p;
p=L;
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申請空間失敗!");
exit(0);
}
p->next=NULL;
return L;
}

這麼寫初始化函數(有返回值)程序運行正常,但是若改為無返回值函數,則後面創建鏈表是出問題,想不通 運行時會出現 段錯誤 提示
CODE:
void * Stu_list_Init(STU *L)//初始化鏈表 //無返回值
{
STU *p;
p=L;
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申請空間失敗!");
exit(0);
}
p->next=NULL;
}

為什麼呢?這兩種寫法有本質上有什麼不同?求解···

[火星人 ] 求解:關於帶頭結點鏈表初始化的 問題已經有317次圍觀

http://coctec.com/docs/linux/show-post-183386.html