几次重新分配后出现分段错误 |结构数组
Segmentation Fault after few realloc | Array of Structs
好吧,我正在用结构形式的数组实现散列 table,如下所示:
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;
}
我有一个函数可以向散列 table 添加一些内容,如果条目超过 SIZE 的 70%,我会调整 table.
的大小
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++;
}
散列 table 的初始化是正确的,但问题是当我 realloc/resize 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
函数没有 return 新指针,让调用者使用现在无效的旧指针。
好吧,我正在用结构形式的数组实现散列 table,如下所示:
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;
}
我有一个函数可以向散列 table 添加一些内容,如果条目超过 SIZE 的 70%,我会调整 table.
的大小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++;
}
散列 table 的初始化是正确的,但问题是当我 realloc/resize 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
函数没有 return 新指针,让调用者使用现在无效的旧指针。