gpt4 book ai didi

c - 初始化结构段错误

转载 作者:行者123 更新时间:2023-11-30 15:30:41 25 4
gpt4 key购买 nike

我正在初始化一个代表哈希表的结构。我试图使频率 = 0 且键 = null,但我遇到了段错误,但不太清楚原因。这是我的代码:

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 初始化,并且所有 char 指针都指向 NULL。这是错误的吗?我应该以其他方式做这件事吗?感谢您的帮助!

最佳答案

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

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;然后a.keys == b.keys (它们指向同一个数组)。

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

关于c - 初始化结构段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25480362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com