我目前正在尝试创建一个链表并在一个函数中对其进行初始化。它看起来像这样:
void add_forest(node_t *head, unsigned char value)
{
int key;
node_t *current = head;
while (current->next != NULL)
{
current = current->next;
}
}
int main()
{
node_t *head;
*head = init_forest(); //error here
}
我目前在我的代码中的以下区域遇到段错误,无法弄清楚原因。我在 init_forest()
中创建头部,然后在 main 中返回。当我通过 init_forest()
时,树确实被构建了。有什么建议吗?
最佳答案
紧迫的问题在 main()
中:
node_t *head;
*head = init_forest();
head
是一个未初始化的指针;你不能取消引用它,你实际上并不想这样做。你应该使用:
node_t *head = init_forest();
但是您随后需要确保 init_forest()
返回一个 node_t *
,而不是一个 node_t
值。这是这种链表管理功能比较正统的风格。您在函数中分配了结构;如果您返回该结构的副本而不是指向该结构的指针,就会泄漏内存(并且您稍后会遇到其他问题)。
关于在 C 中创建链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28550065/