0
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;
    }

}
4

1 回答 1

1

首先,请不要malloc()在 C 中转换 的返回值

其次,return list;返回的函数很奇怪int,这可能会导致问题。显然,函数必须返回Server *(的类型list)才能有意义。或者它可以使list参数具有类型Server **并重写调用者的指针,但这通常不太方便使用。

第三,您只复制 id 的指针,因此如果使用例如char保存不同名称的本地缓冲区调用它,您将获得您描述的效果。您需要使 id 成为实际的数组Server,或者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);
于 2013-04-03T09:29:21.133 回答