c - LinkedList 头节点不断被覆盖 C

标签 c pointers

我目前正在尝试创建一个链表,但是,由于某种原因,我的头指针数据一直被覆盖。我有以下方法应该处理表中的插入并记录我遇到的任何单词的频率。如果单词已经出现,则更新它的频率,否则,将单词添加到列表的末尾,频率为 1。方法开头的打印语句应该打印存储在第一个值处的单词.我用来测试列表的文本是 a dog and cat,但是第一个 print 语句打印出存储在 word 变量中的值,尽管它应该始终是打印出 a。当我打印整个链表时,我看到的只是输入的最后一个词,或 dog。我假设它与我遍历列表以查看单词是否存在或是否必须打印的方式有关,但我不知道如何解决这个问题。

typedef struct tableNode{
  int freq;
  char * word;
  struct tableNode *next;

}tableNode;

void insertIntoTable(char* word){
    if (tableHead != NULL) printf("%s\n", tableHead -> word);
    if (tableHead == NULL){
        printf("Null %s\n", word);
        tableHead = (tableNode*) malloc(sizeof(tableNode));
        tableHead -> word = word;
        tableHead -> freq = 1;
        tableHead -> next = NULL;
        return;
    }

    tableNode* ptr = tableHead;
    while(ptr -> next != NULL){
        if (strcmp(ptr -> word, word) == 0){
            printf("Dup %s %s\n", ptr -> word, word);
            ptr -> freq = (ptr -> freq) + 1;
            return;
        }
        ptr = ptr -> next;
    }
    if (strcmp(ptr -> word, word) == 0){
        printf("Dup %s %s\n", ptr -> word, word);
        ptr -> freq = (ptr -> freq) + 1;
        return;
    }
    printf("New %s\n", word);
    ptr -> next = (tableNode*) malloc(sizeof(tableNode));
    ptr -> next -> word = word;
    ptr -> next -> freq = 1;
    ptr -> next -> next = NULL;
}

最佳答案

事实证明,这不是我的方法有问题,而是我调用插入方法的方式有问题。我正在发送一个 char*,但是那个 char* 的值一直在变化,每次都有效地改变了头节点的值。我用 strdup 创建了一个副本并发送了那个值,它起作用了。

关于c - LinkedList 头节点不断被覆盖 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447340/

相关文章:

c - 访问结构值,更改结构值

c++ - 在 C++ 中通过指针设置/获取值

c - git 的外部 shell cmd 源代码中的 execvp 调用返回 EFAULT(错误地址)errno,似乎仅在 64 位中。谷歌搜索什么也没透露

c - 静态链接lua库后符号丢失

c - 如何将空指针(结构返回类型)更改为声明的结构?

c++ - 为什么这个程序没有抛出任何错误?

c - 嵌入式系统开发为什么要烧录根文件系统

c - 反转数字数组

c - 将两个别名传递给 `typedef struct` 意味着什么?

pointers - 无法在 GO 中分配值