C 初始化结构分段错误

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

我正在初始化一个表示哈希表的结构。我试图使频率=0,键=空,但我得到一个seg故障,不太清楚为什么。 这是我的密码:

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;
}