Головной узел LinkedList продолжает перезаписываться C - PullRequest
1 голос
/ 01 апреля 2019

В настоящее время я пытаюсь создать связанный список, однако по какой-то причине мои данные указателя головы продолжают перезаписываться.У меня есть следующий метод, который должен обрабатывать вставки в таблицу и записывать частоту любого слова, с которым я столкнулся.Если слово уже было просмотрено, обновите его частоту, в противном случае добавьте слово в конец списка с частотой 1. Предполагается, что оператор print в начале метода должен печатать слово, сохраненное в первом значении.,Текст, который я использую для проверки списка, - 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;
}

1 Ответ

0 голосов
/ 01 апреля 2019

Оказывается, это не было проблемой с моим методом, это была проблема с тем, как я вызывал метод вставки.Я отправлял символ *, но значение этого символа * постоянно менялось, каждый раз эффективно меняя значение головного узла.Я создал дубликат с strdup и отправил это значение, оно сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...