【发布时间】:2020-11-01 11:51:22
【问题描述】:
我正在创建一个哈希表数据结构,并且我的初始化函数出现分段错误错误。代码如下:
void allocTableSlots(alu **table, int index){
if(index == MAX)
return;
else{
table[index] = calloc(1, sizeof(alu));
table[index]->registration = -1;
table[index]->next = -1;
allocTableSlots(table, index+1);
}
}
void initializateHashTable(hash *hashing){
hashing = calloc(1, sizeof(hash));
allocTableSlots(hashing->table, 0);
hashing->collisionArea = 690;
}
我的结构是:
#define MAX 997
typedef struct alu{
int registration;
char name[80];
char email[80];
int next;
} alu;
typedef struct reg{
alu *table[MAX];
int collisionArea;
}hash;
错误出现:
if(index == MAX)
关于allocTableSlots()函数
如果我将MAX 更改为MAX-1 或任何其他数字,例如500,错误仍然出现在位置499 之后,所以看起来不像是我试图访问我的数组的无效位置table
我已经尝试了一个迭代版本(以防我的递归有一些错误)但还是一样
【问题讨论】:
-
您是否缺少指针转换,这是一个错字?
-
@Dev-il 你不需要在 C 中转换
void*。你在考虑 C++ 吗? -
为什么
initializeHashTable会覆盖传递给它的指针,而不是初始化它指向的结构? -
我无法重现该错误。但是
initializateHashTable需要返回它分配的指针,或者它应该带一个hash **参数。 -
我不建议为此使用递归。您可能会遇到堆栈溢出。
标签: c data-structures hash segmentation-fault runtime-error