gpt4 book ai didi

c - 双链表;新手尝试

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:24 25 4
gpt4 key购买 nike

我刚刚开始学习 C,并且(似乎)到目前为止,大多数东西都在点击。但是,我在尝试使用双链表 时遇到了一些问题。当我尝试构建/运行此代码时,我不断收到 seg-fault。我正在通过 NetBeans 使用 Cygwin 提供的 gcc 进行编译。

我讨厌只转储一段代码并说“帮助”,但我不知道此时还有哪些其他细节是相关的,所以如有必要,请随时询问细节:

#include <stdio.h>
#include <stdlib.h>

struct node_t{
struct node_t *prev;
struct node_t *next;
};

struct list_t{
struct node_t *head;
struct node_t *tail;
int length;
};

struct node_t *new_node(void);
struct list_t *new_list(void);
int append_list_node(struct list_t *list, struct node_t *node);

int main(void) {

int i = 0, length = 0;
struct node_t *node;
struct list_t *list = new_list();

for(i = 0; i < 10; i++){
length = append_list_node(list, new_node());
printf("%d", length);
}

return 0;

}

struct node_t *new_node(void){
struct node_t *node = malloc(sizeof(struct node_t));
return node;
}

struct list_t *new_list(void){
struct list_t *list = malloc(sizeof(struct list_t));
list->length = 0;
return list;
}

int append_list_node(struct list_t *list, struct node_t *new_node){
if(list->head == NULL){
list->head = new_node; // edited
new_node->prev = NULL;
}else{
list->tail->next = new_node;
new_node->prev = list->tail;
}
return (++list->length);
}

感谢大家的 super 快速回复,所有答案都是正确的。当我在 F5 之间快速查看代码时,我意识到我没有设置 tail,所以我决定更改标记为 edited< 的行如下:

list->head = list->tail = new_node;

我也决定使用 calloc() 但是,我读到频繁使用它会导致相当大的执行时间成本,因为它是清除和分配的。想法?

最佳答案

使用 calloc() 分配内存。 malloc() 函数不会将内存初始化为零(因此指针将设置为 NULL)。您假设指针默认为 NULL。

关于c - 双链表;新手尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900892/

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