当前位置: 首页 > 知识库问答 >
问题:

尝试在哈希表中插入键时收到“分段错误”

柯轶
2023-03-14

我正在尝试使用我已经制作的链表结构在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()不会引发任何运行时错误。但任何其他哈希表函数都可以。我无法访问表中的链表。

共有1个答案

楚泳
2023-03-14

Rslt是一个指针。您不能像初始化Struts那样初始化它。从函数返回后,rslt指针将在以下代码中变为无效

 HashTable* createTable(){
     HashTable* rslt = {calloc(9,sizeof(LinkedList*))};

{..}不是动态内存分配。首先尝试malloc rslt

     HashTable *rslt = malloc(sizeof(HashTable));
     rslt->table = calloc...
 类似资料:
  • 下面的代码是正确的,但我不明白为什么两行代码可以工作。我指的是最后一块。具体地说,我指的是这两行: newword->next=hashtable[index]; hashtable[index]=newword; 如果目标是在哈希表的索引处将节点追加到链表,那么为什么newword->next指向哈希表的索引,而该索引处可能已经有节点了。我认为它应该是newword->next=NULL,因为该

  • javax.persistence.persistenceException:org.hibernate.internal.exceptionconverterimpl.convert(exceptionconverterimpl.java:154)org.hibernate.internal.exceptionconverterimpl.convert(exceptionconverterimp

  • 我正在尝试在表a中插入外键(在phpmyadmin中): 将表A添加外键(id_B)引用B(id_B); 但我得到了一个错误: 表A的id_A为主键,表B的id_B为主键。这两个表都使用innoDB作为存储引擎,表A中的id_B列和表B中的id_B列具有相同的类型。 出了什么问题,我该如何解决?

  • 长度为10的哈希表使用带有哈希函数h(k)=k mod 10的开放寻址和线性探测。在向空哈希表中插入8个值后,该表如下所示 使用同一哈希函数和线性探测的键值的多少个不同插入序列将产生如上所示的哈希表? 答案是128。 我知道91,2,13,24,77是5!=120但我不知道其他8种组合是什么?

  • 当我进行插入时,在traduction(idMot references mot)中的外键为null,在前面发送正确的外键。我最终出现了这个错误:not-null属性引用了一个空值或临时值:com.virtual.expertise.mydico.model.traduction.mot 我想我在我的模型中做错了什么,但仍然不知道是什么。 下面是交易表: 下面是我的WebService:(其中id

  • 我知道如何在哈希表中找到相应键的值,但我如何找到哪个键附加到特定值?我写了一个函数,它循环遍历String并查找关键字。它做的很快,但我需要返回该值的关键字找到。这是我目前为止的方法