以下功能有什么问题吗?他们不知何故造成了段故障。

struct processNode* create_node()
{
    struct processNode* newNode =  (struct processNode*)malloc(sizeof(struct processNode));
    newNode->next = NULL;
    return newNode;
}

struct processNode* append_node(struct processNode* list,struct processNode* newNode )
{
    struct processNode* tracker= NULL;
    tracker = list;

    if(tracker == NULL)
    {
        tracker = newNode;
    }
    else
    {
        while(tracker->next != NULL)
        {
            tracker =tracker->next;
        }
        tracker->next = newNode;
        tracker = tracker->next;
    }

    tracker->next=NULL;
    tracker = list;
    return tracker;
}


我正在C语言中创建一个Shell,需要创建一个链接列表来解析用户的命令行。在第二个函数中,我打算返回带有新添加的指针的新列表。

最佳答案

我想函数将返回一个指向列表开头的指针。

假设在listNULL的情况下调用该函数

所以这很好:

    if(tracker == NULL)
    {
      tracker = newNode;
    }


但在这儿

    tracker = list;   <---- Not good....
    return tracker;


您覆盖跟踪器并返回NULL

您可以尝试像:

struct processNode* append_node(struct processNode* list,struct processNode* newNode )
{
    struct processNode* tracker= NULL;
    tracker = list;

    if(tracker == NULL)
    {
        tracker = newNode;
        return tracker;        // Notice
    }

    while(tracker->next != NULL)
    {
        tracker =tracker->next;
    }
    tracker->next = newNode;

    return list;
}

关于c - 调试以下功能(段错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43446009/

10-09 05:57