【问题标题】:linked list not inserting new values "C language"链表不插入新值“C语言”
【发布时间】:2023-04-03 07:47:01
【问题描述】:

我遇到了一个问题,我的链表没有添加我给它的新值。它导致了分段错误,但我不知道如何修复它

当前代码

typedef struct node {
  int value;/*data stored in the node  */
  struct node *next;
 /*pointer to the next node*/
} NODE;

void add(NODE **list, int n){//add_to_list in slides
  NODE *new_node;

  new_node = malloc(sizeof(NODE));
  if (new_node == NULL) {
    fprintf(stderr,"Error:malloc failed in add_to_front \n");
    exit(EXIT_FAILURE);
  }
  new_node->value = n;
  new_node->next = *list;
  //return new_node;

}
void print_list(NODE *list){
  printf("\n=========\n");
  for (;list;list=list->next){
    printf("%d\t",list->value);
  }
  printf("\n=========\n");
  }

int main()
{
  NODE *first=NULL;
 
  print_list(first);
  add(&first,10);
  add(&first,30);
  add(&first,20);
  add(&first,40);
  add(&first,30);
  print_list(first);

}

更新

我在 main 中添加,但现在没有打印分段错误...

add(&first, number)

错误发生在 add 函数中,更具体地说是这一行“new_node->next = *list;”

我尝试了取消引用和许多其他操作,但无济于事。

【问题讨论】:

  • 如果您的程序,您将NODE *first=NULL; 作为第一行。所以first 是一个空列表。您预计这种情况何时会改变?指出代码中将某些内容分配给 first 或以其他方式更改它的行。
  • 所以 add 函数是用来添加列表的(第一个)
  • 添加函数中的哪一行?
  • 它在 main add(&first,10) 是它添加的第一件事
  • ohhhhh...我刚刚明白了

标签: arrays c pointers struct linked-list


【解决方案1】:

节点没有插入是因为你没有更新头指针:在add()函数的末尾添加这条语句:

        *list = new_node;

【讨论】:

  • 是的,谢谢!我累了,没有意识到我忘记反映数组中的新变化!
【解决方案2】:

对取消引用的列表进行更改

(*list) = new_node;

为了将 new_node 值添加到列表中。

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2014-02-11
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多