我正在学习c语言中的链接列表,当我尝试在main()中打印打印头的base_pri时,这只会给我带来分段错误。
这是我的代码:
#include<stdlib.h>
typedef struct iorb {
int base_pri;
struct iorb *link;
} IORB;
IORB *head = NULL;
void makeList(IORB *h, int s);
int main(){
makeList(head, 15);
printf("%d\n", head->base_pri);
return 0;
}
void makeList(IORB *h, int s){
while(s > 0){
IORB *temp = (IORB*)malloc(sizeof(IORB));
temp->base_pri = (rand() % 20);
temp->link = h;
h = temp;
s--;
}
}
任何意见,将不胜感激。
最佳答案
您将head
作为值的调用传递给makeList()
,当控制权返回到调用函数head
时仍未得到修改,即其仍为NULL
,而当您执行head->base_pri
即为NULL->base_pri
显然它给段。故障。
代替将head
传递给makeList()
传递head
的地址为
typedef struct iorb {
int base_pri;
struct iorb *link;
} IORB;
IORB *head = NULL;
void makeList(IORB **h, int s);
int main(){
makeList(&head, 15);/* pass head address */
printf("%d\n", head->base_pri);
return 0;
}
void makeList(IORB **h, int s){
while(s > 0){
IORB *temp = (IORB*)malloc(sizeof(IORB));
temp->base_pri = (rand() % 20);
temp->link = (*h);
(*h) = temp;
s--;
}
}