我正在尝试使用我已经制作的链表结构在 C 中实现开放散列。链接列表结构工作完美,但是当尝试在我的哈希表结构中使用它们时,我经常遇到“段错误(核心转储)”
我已经检查过以确保我使用了正确的数据类型并且分配了正确的内存量。
typedef struct LinkedList LinkedList;
LinkedList* createLinkedList(){
LinkedList* rslt = malloc(sizeof(Node*)); //Allocate memory for LL
//rslt->head = calloc(1,sizeof(Node*)); //Allocate memory for head with default Node* value (NULL)
return rslt;
}
void add_end_LinkedList(LinkedList* x, int v){
//Special case: LinkedList is empty
if(x->head == NULL)
x->head = createNode(v);
else{
//Traversing to end of list
Node* p;
for(p = x->head; p->next != NULL; p = p->next){1;}
p->next = createNode(v);
}
}
void add_beg_LinkedList(LinkedList* x, int v){
Node* p;
//Special case: LinkedList is empty
if(x->head == NULL)
x->head = createNode(v);
else{
p = createNode(v);
p->next = x->head;
x->head = p;
}
}
int isIn_LinkedList(LinkedList* x, int v){
for(Node* p = x->head; p != NULL; p = p->next){
if(p->val == v) return 1;
}
return 0;
}
void print_LinkedList(LinkedList* x){
for(Node* p = x->head; p != NULL; p = p->next){
print_Node(p);
printf(", ");
}
printf("\n");
return;
}
//HASHTABLE_____________________________________________________________
struct HashTable{
LinkedList** table;
};
typedef struct HashTable HashTable;
HashTable* createTable(){
HashTable* rslt = {calloc(9,sizeof(LinkedList*))};
for(int i = 9; i < 9; i++)
rslt->table[i] = createLinkedList();
return rslt;
}
int compute_hash(int v){
return v%9;
}
int isIn_HashTable(HashTable* x, int v){
return isIn_LinkedList(x->table[compute_hash(v)], v);
}
int insert_HashTable(HashTable* x, int v){
if(isIn_HashTable(x, v)){
return 0;
}
add_beg_LinkedList(x -> table[compute_hash(v)], v);
return 1;
}
int main(void){
HashTable* a = createTable();
insert_HashTable(a, 6);
return 0;
}
createTable() 不会引发任何运行时错误。但任何其他哈希表函数都可以。我无法访问表中的链接列表。
最佳答案
Rslt 是一个指针。你不能像初始化struts 那样初始化它。从函数返回后,以下代码中的 rslt 指针将失效
HashTable* createTable(){
HashTable* rslt = {calloc(9,sizeof(LinkedList*))};
{..} 不是动态内存分配。首先尝试 malloc rslt
HashTable *rslt = malloc(sizeof(HashTable));
rslt->table = calloc...
关于c - 尝试在哈希表中插入键时收到 "Segmentation fault",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318909/