gpt4 book ai didi

c - 从后面插入 : Linked List

转载 作者:行者123 更新时间:2023-12-02 04:49:49 25 4
gpt4 key购买 nike

我从这个站点读取了代码:http://www.codeproject.com/Articles/24684/How-to-create-Linked-list-using-C-C ,但它给了我段错误,我不太明白。

*我将其修改为我的结构

struct Node
{
int type;
char cmd[256];
struct Node *next;
};

struct Node *head = NULL;

void insert(int val, char arr[])
{
struct Node *temp1 = (struct Node*)malloc(sizeof(struct Node));
struct Node *temp2 = (struct Node*)malloc(sizeof(struct Node));
temp1 = head;
while(temp1->next != NULL)
temp1 = temp1->next;

temp2->type = val;
strcpy(temp2->cmd, arr);

temp2->next = NULL;
temp1->next = temp2;
}

这段代码有什么问题?

OK,这个问题解决了。感谢 Guyz'^'!你知道如何将字符 "(ASCII 34) 放入 printf 字符串中吗?(例如,如果我执行 printf("Print this "sentence""); 它会给我句子中的错误,cut I cast another set of “”在“”内。非常感谢。

最佳答案

首先,您未能在初始插入时设置头指针。这可以通过简单的头部检查来完成,但如果插入环设置正确则不需要。其次,你正在泄漏内存。这不是Java。覆盖保存动态分配地址的指针与将内存扔出窗外一样好。

这是一种无需在插入代码中隐藏 if (head == NULL) 特殊情况的方法。与流行观点相反,如果您这样做,则不需要这种特殊情况:

void insert(int val, char arr[])
{
struct Node **pp = &head;
while (*pp)
pp = &(*pp)->next;

*pp = malloc(sizeof(**pp));
(*pp)->next = NULL;
(*pp)->type = val;
strcpy((*pp)->cmd, arr);
}

只需确保 head 在进行任何插入之前已初始化为 NULL,通过查看更新后的帖子,您似乎正在做正确的事情。

最后,don't cast malloc() results in C programs.

关于c - 从后面插入 : Linked List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076294/

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