int add_server(Server *list, char *server_id, char *capacity)
{
Server *new_node=(Server *)malloc(sizeof(Server));
new_node->id=server_id;
new_node->capacity=atoi(capacity);
if(list==NULL)
{
list=new_node;
list->next=list;
return list;
}
else
{
Server *temp=list;
while(temp->next!=list)
{
temp=temp->next;
}
temp->next=new_node;
new_node->next=list;
}
}
答案 0 :(得分:1)
首先,please don't cast malloc()
's return value in C。
其次,return list;
在返回int
的函数中很奇怪,可能会导致问题。显然,该函数必须返回Server *
(list
的类型)以便有意义。或者它可以使list
参数具有类型Server **
并重新编写调用者的指针,但这通常不太方便使用。
第三,你只复制id的指针,所以如果用例如一个包含不同名称的本地char
缓冲区,您将获得您描述的效果。您需要在Server
中将id设为实际数组,或在存储之前在参数上调用strdup()
。
所以,要么:
typedef struct {
/* ... */
char server_id[32];
/* ... rest of fields ... */
} Server;
strlcpy(new_node->server_id, server_id, sizeof new_node->server_id);
或:
new_node->id = strdup(server_id);