将节点添加到C中的链表时EXC_BAD ACCESS



我正在尝试实现一个函数,在链表的末尾添加一个新节点,可以在这里找到。然而,当在Xcode中运行下面的代码时,我在标记有注释//error 的if语句处得到EXC_BAD_ACCESS错误

这是我第一次遇到链表,有人能解释我做错了什么吗?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _node {
    int value;
    struct _node *next;
} node;
int addNodeBottom(int val, node *head);
int main(int argc, const char * argv[]) {
    node *head;
    head = NULL;
    for (int i = 1; i<11; i++) {
        addNodeBottom(i, head);
    }

    node *temp = head;
    while (head != NULL) {
        head = temp->next;
        free(temp);
        temp = head;
    }
    return 0;
}
int addNodeBottom(int val, node *head){
    //create new node
    node *newNode = (node*)malloc(sizeof(node));
    if(newNode == NULL){
        fprintf(stderr, "Unable to allocate memory for new noden");
        exit(-1);
    }
    newNode->value = val;
    newNode->next = NULL;
    //check for first insertion
    if(head->next == NULL){                //ERROR
        head->next = newNode;
        printf("added at beginningn");
    }
    else {
        //else loop through the list and find the last
        //node, insert next to it
        node *current = head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
        printf("added latern");
    }
    return 0;
}
head = NULL;
...
if(head->next == NULL)

正因为如此。您应该首先将头初始化为有效指针。问题的可能解决方案是将node** head传递给函数而不是node* headPtr,并检查*headPtr == NULL以使其可以使用head = NULL

问题是取消引用指向NULL的指针。参见main-中的此处

head = NULL;

但在函数中,你可以取消对它的引用——

if(head->next == NULL){                //ERROR

而不检查CCD_ 7是否为CCD_。当headNULL时处理该情况,如果不是NULL则继续。

相关内容

  • 没有找到相关文章

最新更新