【发布时间】:2012-02-29 22:31:55
【问题描述】:
我正在尝试在 C 中创建一个带有头节点和尾节点的链表。每个节点都需要保存一个 int 和一个字符串。我的问题是,当我创建一个新节点时,为其分配正确的值,并将其添加到列表的末尾。所有先前的节点都获得了我分配给最新节点的字符串。 int 值保持正确,但就像它们的 char 指针被重新分配一样。我猜我在指针上做错了什么,并且在网上查看了大量示例,但看不出我哪里出错了。我包括了我的节点结构和添加功能。感谢大家的帮助!!
// Linked list (queue) for requests
typedef struct request {
struct request *next;
int request_id;
char *command;
} request_t;
// Global variables
request_t *head = NULL;
request_t *tail = NULL;
void add(int r_id, char *c) {
request_t *node = NULL;
node = (request_t *)malloc(sizeof(request_t));
node->request_id = r_id;
node->command = c;
node->next = NULL;
if(head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
【问题讨论】:
-
你的错误不是指针,而是指针指向的内容。你需要了解动态内存分配;我建议拿起一本好书和一杯咖啡。
-
你的
add函数看起来没问题,所以我猜问题是你用相同的第二个参数调用add。如果不是这种情况,请提供更多信息:您如何调用您的add函数? -
天啊,现在的孩子们怎么了,他们需要 typedef 甚至是简单的非透明数据类型?
标签: c