[英]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
字段; capacity
和keys
被復制為指針。 這意味着如果您執行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.