gpt4 book ai didi

c - 从后面插入: Linked List

转载 作者:行者123 更新时间:2023-12-02 21:48:43 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;
}

这段代码有什么问题?

好的,这个问题已经解决了。谢谢盖兹'^'!你知道如何将字符 "(ASCII 34) 放入 printf 字符串中吗?(例如,如果我这样做 printf("Print this "sentence""); 它会给我句子错误,cut I Casted 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