c - 几次重新分配后出现段错误 |结构数组

标签 c arrays segmentation-fault hashtable realloc

好吧,我正在实现一个具有结构形式数组的哈希表,如下所示:

    int SIZE = 769;
    int entries=0;


    typedef struct entry {
        long id;
        long n_article;
        long id_rev;
        long uni_rev;
    } Entry;

    typedef Entry * THash;


    THash init_THash ()
    {
        int i;
        THash  t = (THash) malloc(SIZE*sizeof(struct entry));
        //...
    return t;
}

我有一个向哈希表添加内容的函数,如果条目超过 SIZE 的 70%,我会调整表的大小。

THash resize_THash (THash h){
    int i;
    int prime = SIZE*2;
    h = (THash) realloc (h,(prime)*sizeof(struct entry)); 
    //...
    SIZE = prime;
    return h;
}


void add_THash (THash h,long id, long idrevision){
    int i,r=0;
    if (entries > SIZE * 0.7) h=resize_THash(h);
    //...
    entries++;
}

哈希表的初始化是正确的,但问题是当我重新分配/调整大小 3 次时,停止工作,给我段错误;在这一点上,我尝试了一切,但我失败了。任何人都可以向我解释,为什么这个实现是错误的?

例如:在这个main中,如果条件是i<3000它有效,但如果它是 i<6000 , 不起作用。

int main()
{
int i;
THash t = init_THash();


    for(int i=10;i<3000;i++){

       add_THash(t,i,627604899);


    }

    printf("SIZE:%d\n",SIZE);
    printf("ENTRIES: %d\n",entries);
    return 0;
}

最佳答案

add_Thash 函数不返回新指针,让调用者使用现在无效的旧指针。

关于c - 几次重新分配后出现段错误 |结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381627/

相关文章:

python - 在 NumPy 中操作数组元素

c - 如何修改C中结构体中的字符串?

c - 字符串的子串并打印出来

c - 如何在 C 中自动更新两个或多个 GtkDrawArea

c - Linux下贪吃蛇游戏源代码(C语言)

php - html表单发布给出空数组

c - 查找数组中 50 个随机数的平均值 - C 编程

c++ - 使用克隆(): segmentation fault

c - OpenCL:尝试打印 sizeof(cl_int *) 会出现段错误

c++ - 名称或类型具有某种语言链接意味着什么?