C 初始化结构分段错误
我正在初始化一个表示哈希表的结构。我试图使频率=0,键=空,但我得到一个seg故障,不太清楚为什么。 这是我的密码:C 初始化结构分段错误,c,segmentation-fault,C,Segmentation Fault,我正在初始化一个表示哈希表的结构。我试图使频率=0,键=空,但我得到一个seg故障,不太清楚为什么。 这是我的密码: htable htable_new(int capacity) { int i; htable result = emalloc(sizeof *result); result->capacity = capacity; result->frequencies = emalloc(capacity * sizeof result->freque
htable htable_new(int capacity) {
int i;
htable result = emalloc(sizeof *result);
result->capacity = capacity;
result->frequencies = emalloc(capacity * sizeof result->frequencies[0]);
result->keys = emalloc(capacity * sizeof result->keys[0]);
for (i = 0; i < capacity; i++) {
result->frequencies[i] = 0;
}
for (i = 0; i < capacity; i++) {
result->keys[i] = NULL;
}
return result;
}
我不知道有什么问题,因为我正在尝试初始化分配给0的所有int,
所有的字符指针都指向NULL。这是错的吗?我应该用别的方法来做吗?
谢谢你的帮助 尝试以下操作(注意结果和返回类型附近的指针):
htable*htable\u新(整数容量){
int i;
htable*result=emalloc(sizeof*result);
结果->容量=容量;
结果->频率=emalloc(容量*结果大小->频率[0]);
结果->键=emalloc(容量*结果大小->键[0]);
对于(i=0;i频率[i]=0;
}
对于(i=0;i键[i]=NULL;
}
返回*结果;
}
或者,如果您的结构很小,您可能希望按值返回它:
htable htable_new(int capacity) {
int i;
htable result = { 0 };
result.capacity = capacity;
result.frequencies = emalloc(capacity * sizeof result->frequencies[0]);
result.keys = emalloc(capacity * sizeof result->keys[0]);
for (i = 0; i < capacity; i++) {
result.frequencies[i] = 0;
}
for (i = 0; i < capacity; i++) {
result.keys[i] = NULL;
}
return result;
}
htable-htable\u新(内部容量){
int i;
htable result={0};
结果:容量=容量;
result.frequencies=emalloc(容量*结果大小->频率[0]);
result.keys=emalloc(容量*sizeof result->keys[0]);
对于(i=0;i
我将result
更改为实际的结构,而不是指向它的指针。正因为如此,它被分配到堆栈上,字段像往常一样初始化,然后我按原样返回它。这意味着,所有结构都将复制到新位置
请记住,仅复制htable
的字段<代码>容量和键
作为指针复制。这意味着如果你做了htable a=new\u htable(10);表b=a
然后a.keys==b.keys
(它们指向相同的数组)
我不知道你的代码是怎么编译的。顺便说一下,您忘记初始化
num_-keys
字段,并且您定义的结构名称与返回类型的名称不匹配。在什么时候发生segfault?显然是在“for(i=0;i0
放在括号中。
htable *htable_new(int capacity) {
int i;
htable *result = emalloc(sizeof *result);
result->capacity = capacity;
result->frequencies = emalloc(capacity * sizeof result->frequencies[0]);
result->keys = emalloc(capacity * sizeof result->keys[0]);
for (i = 0; i < capacity; i++) {
result->frequencies[i] = 0;
}
for (i = 0; i < capacity; i++) {
result->keys[i] = NULL;
}
return *result;
}
htable htable_new(int capacity) {
int i;
htable result = { 0 };
result.capacity = capacity;
result.frequencies = emalloc(capacity * sizeof result->frequencies[0]);
result.keys = emalloc(capacity * sizeof result->keys[0]);
for (i = 0; i < capacity; i++) {
result.frequencies[i] = 0;
}
for (i = 0; i < capacity; i++) {
result.keys[i] = NULL;
}
return result;
}