在C a a中向链表末尾添加新节点

tzcvj98z  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(182)

我试图在C中添加一个新节点到链表的末尾,但是我的代码有问题。

#include <stdio.h>
#include <stdlib.h>

struct node {
  int data;
  struct node *next;
};

struct node *head = NULL;

void add_node(int data) {
  struct node *new_node = malloc(sizeof(struct node));
  new_node->data = data;
  new_node->next = NULL;

  if (head == NULL) {
    head = new_node;
  } else {
    struct node *current = head;
    while (current->next != NULL) {
      current = current->next;
    }
    current->next = new_node;
  }

  int *x = NULL;
  *x = 5;
}

int main() {
  add_node(5);

  return 0;
}

然而,当我试图运行这段代码时,我遇到了一个分段错误。有人能帮我找出问题出在哪里吗?我试着通过添加print语句来调试代码,但我不确定问题出在哪里。我还试着使用malloc仔细检查我是否正确地为新节点分配了内存。

hc2pp10m

hc2pp10m1#

在更新后的代码中,您需要遵从之前设置为NULL的指针x。删除垃圾代码,或者如果您必须让x指向一个整数:

int *x = &(int) {0};
*x = 5;

我建议您沿着以下方式消除全局变量:

#include <stdlib.h>

struct node {
    int data;
    struct node *next;
};

void add_node(struct node **head, int data) {
    struct node *new_node = malloc(sizeof(struct node));
    if(!new_node) {
       // handle error
       return;
    }
    new_node->data = data;
    new_node->next = NULL;
    if (!*head) {
        *head = new_node;
        return;
    }
    struct node *current = *head;
    for(;current->next; current = current->next);
    current->next = new_node;
}

int main() {
    struct node *head = NULL;
    add_node(&head, 5);
}

相关问题