【问题标题】:How to create and access 2d linked list elements如何创建和访问二维链表元素
【发布时间】:2026-02-16 09:05:01
【问题描述】:

我正在尝试创建二维链接列表。当我尝试访问其元素时,会导致分段错误。

这是部分代码

struct Node{
    char *data;
    int count;
    struct Pair *p;
    struct Node *next;
};

struct Pair{
    char *data;
    int count;
    struct Pair *next;
};

void insertPairs(char *word1, char *word2, struct Node **head){
struct Node *ptr = *head;

while(ptr != NULL) {
    if(strcmp(ptr->data, word1) == 0){
        struct Pair *pairPtr = ptr->p;
        while(pairPtr != NULL){
            if(strcmp(pairPtr->data, word2) == 0){ //Segmentation Fault
                pairPtr->count = pairPtr->count + 1;
                break;
            }
        }
        struct Pair *tmp = (struct Pair*) malloc(sizeof(struct Pair));
        tmp->data = word2;
        tmp->count = 1;
        tmp->next = pairPtr;
        pairPtr = tmp;
        break;
    }
    ptr = ptr->next;
}

}

我做了一些调试。

这行给了我分段错误if(strcmp(pairPtr->data, word2) == 0)

为什么if(strcmp(ptr->data, word1) == 0) 工作但上面没有?我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: c linked-list segmentation-fault


    【解决方案1】:

    查看您提供的代码,我没有发现问题。 word2pairPtr->data 是否有可能是空指针或不是指向以空结尾的字节字符串的指针?在这种情况下,行为是未定义的,很可能会导致分段错误。

    查看:http://en.cppreference.com/w/c/string/byte/strcmp

    【讨论】:

    • 问题是pairPtr->data,但在while 语句中有一个NULL 签入,所以它不应该是NULL
    • while 语句中,您只需验证pairPtr 不是NULL。您没有验证其中的data 字段不是NULL