插入哈希表

时间:2015-04-05 18:09:26

标签: c hashtable

我试图编写一个程序来创建一个hash_table来处理与链式列表的冲突。链式列表将由一个由2个字符组成的结构组成。 我想在链表的开头插入这种类型的结构,但我一直在线上遇到seg故障,我不明白为什么。 这是我的代码:

typedef struct celula       //this is the chained list structure
{
    struct celula *urm;
    void *info;
} TCelulaG, *TLG;

typedef struct  //this is the hash_table structure      
{
    size_t M;
    TLG * v;
} TD;

typedef struct   // the structure that should be inserted
{
    char *key;
    char *value;
} TDate;

我有一个哈希函数和一个初始化函数(设置表的每个参数为null),效果很好。

现在插入功能:

int put(TDate element, TD * hash_table,size_t M)    
{
    TLG it,aux,ant;                     
    size_t h=hash(element.key,M);   
    it=(TLG)malloc(sizeof(TCelulaG));           
    it= hash_table->v[h];   
    it->info=(TDate*)malloc(sizeof(TDate));   //this is the line that causes the segfault

    it = hash_table->v[h];
    if(it==NULL)                        
    {
        ((TDate*)((it)->info))->key=element.key;
        ((TDate*)((it)->info))->value=element.value;
        it->urm=hash_table->v[h];
        hash_table->v[h]=it;
        return 1;
    }
}

1 个答案:

答案 0 :(得分:0)

确保it不为空。

为什么要分配到it,然后使用hash-table->v[h]的作业进行分配。 hash_table->v[h]可能是null,因此是段错误。在分配到it之前检查it->info