我正在学习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--;
        }
}

10-08 03:54