【发布时间】:2011-10-31 22:10:57
【问题描述】:
我在 c 中有一个程序,它接收来自不同客户端和服务器的消息。当消息进来时,它会将消息添加到该列表中。将消息添加到列表后,我将其打印在屏幕和其他服务器上。但是我想在打印后删除包含该消息的节点,因此当调用打印函数时仅打印新消息。打印后如何删除节点?
这是我的结构:
typedef struct trade_list {
char* trader_msg;
u_int32_t id_of_sender;
int sender_timer;
int local_time;
struct trade_list *next;
}trade_list;
trade_list *head = NULL;
这是我的打印方式:
void print_trades()
{
trade_list * newnode = head;
trade_list *previous = NULL;
while (newnode) {
previous = newnode;
if ((elapsed - newnode->local_time >= 8))
printf ("%s\n", newnode->trader_msg);
newnode = newnode->next;
if (previous == NULL)
head = newnode->next;
else
{
previous->next = newnode->next;
free(newnode);
}
}
}
因此给了我一个分段错误。我尝试将 newnode->next 更改为 else 部分中的 newnode。 previous->next = new node; 它没有给我一个错误,但它没有擦除节点,因为每次调用打印函数时它都会打印该节点
【问题讨论】:
标签: c linked-list nodes