簡體   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