только что заметил какое-то странное поведение, может кто-нибудь объяснить и сказать, что я делаю неправильно?
Я хочу реализовать Hashset, используя массив указателей на связанный список, используя C, однако, когда я добавляю свойузел связанного списка, значение данных обновляется только в том случае, если я его сначала распечатаю.
Вот мой код:
#include <stdio.h>
#define print(ref) printf(#ref" = %d\n",ref);
#define HASH_MODULE 13
typedef struct listNode{
int data;
struct listNode*next;
}listNode;
void addToSet(int,listNode**);
int hashCode(int);
int main(){
listNode*linkedListHashset[HASH_MODULE];
addToSet(10,linkedListHashset);
print(linkedListHashset[10]->data);
return 0;
}
void addToSet(int value, listNode**set){
int bucket = hashCode(value);
print(bucket);
listNode newNode = {value};
newNode.next = set[bucket];
set[bucket] = &newNode;
//print(set[bucket]->data);
}
int hashCode(int value){
return value%HASH_MODULE;
}
Вы можете увидеть закомментированную строку, если я скомпилирую ее следующим образомэто, значение не будет сохранено, давая этот вывод (что не является тем, что я ожидал):
bucket = 10
linkedListHashset[10]->data = 0
Однако, когда я включаю закомментированную строку, здесь вывод, это действительно отражает желаемыйобновить, здесь данные в указателе ведут себя, как я ожидал:
bucket = 10
set[bucket]->data = 10
linkedListHashset[10]->data = 10
Я думаю, что это может быть артефакт компилятора или что-то, я компилирую, выполнив:
$gcc -Wall -Werror -O -o source.c
Поэтомупредупреждений нет, все вроде в порядке.Как вы думаете?Чего мне не хватает?