如何正确地将char *添加到链表中而没有seg错误

问题描述 投票:0回答:2

我正在尝试将值(文件路径的字符数组)添加到链接列表中。我不断从_add函数获取Seg错误,并且我不确定如何解决它。我尝试了许多不同的编写函数的方法,但是却一无所获。答案似乎很简单,我只是无法理解。这是我的_add函数代码:

    typedef struct cplist {
        char *path; 
        int cpid;
        time_t  tv_sec;   
        suseconds_t tv_usec;
        struct cplist *next;
    } cplist;

cplist *cpl_add(cplist *head, char *path){
    cplist *current = head;
    while(current->next != NULL){
        current = current->next;
    }

    current->next = (cplist*) malloc(sizeof(cplist));
    current->next->path = path;
    current->next->next = NULL;
}

这是我的主程序代码。我正在读取一个可选的'-v'标志,然后是一个整数,然后是必须添加到链表中的路径:

int main(int argc, char* argv[]){
    int i, j;
    char *p;
    char *key;
    cplist *head = NULL;
    for(i = 0; i < argc; i++){
        if(strcmp(argv[1], "-v") == 0){
            key = argv[2];
            for(j = 3; j < argc; j++){
                p = argv[j];
                cpl_add(head, p);
            }
        } else {
            key = argv[1];
            for(j = 2; j < argc; j++){
                p = argv[j];
                cpl_add(head, p);
            }
        }
    }
c linked-list segmentation-fault
2个回答
0
投票

[当您呼叫cpl_add(head, p)时,您实际上是在呼叫cpl_head(NULL, p)

然后您叫NULL->next炸毁。

  • 添加到树之前,用head初始化malloc。>
  • Be 确定
  • 将此元素中的链接列表指针设置为NULL

    您可以做的其他事情:

  • 摆脱无用的p变量,只需直接用cpl_add(head, argv[j])调用以避免歧义。

0
投票

该函数通常是不正确的,因为最初传递给head的指针等于NULL时,它不处理列表。

© www.soinside.com 2019 - 2024. All rights reserved.