繁体   English   中英

初始化结构段错误

[英]Initializing struct seg fault

我正在初始化一个代表哈希表的结构。 我试图使频率= 0,键=空,但我遇到段错误,但不太确定为什么。 这是我的代码:

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

这是我正在初始化的结构:

struct htablerec {

  int capacity;
  int num_keys;
  int *frequencies;
  char **keys;

};

我尝试初始化分配给0的所有int以及所有指向NULL的char指针时,都没有看到什么问题。 错了吗 我应该以其他方式这样做吗? 谢谢你的帮助!

尝试以下操作(注意结果和返回类型附近的指针):

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

我将result更改为实际的结构,而不是指向它的指针。 因此,它分配在堆栈上,像往常一样初始化字段,然后按原样返回它。 这意味着,所有结构都将被复制到新位置。

请记住,仅复制htable字段; capacitykeys被复制为指针。 这意味着如果您执行htable a = new_htable(10); htable b = a; htable a = new_htable(10); htable b = a; 然后a.keys == b.keys (它们指向同一数组)。

我不知道您的代码是如何编译的。 顺便说一句,您忘记初始化num_keys字段,并且您定义的结构名称与返回类型的名称不匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM