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;
}
}
回答
首先,please don't cast malloc()
's return value in C。
其次,return list;
在返回int
的函數中很奇怪,這可能會導致問題。很明顯,該功能必須返回Server *
(list
的類型)以便合理。或者它可以使list
參數的類型爲Server **
並重新編寫調用者的指針,但這通常不便於使用。
第三,你只複製id的指針,所以如果用例如一個當地的緩衝區擁有不同的名字,你會得到你描述的效果。您需要在存儲前將參數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);
它是循環鏈表。這意味着最後一個節點顯示第一個節點。我避免使用null – user217895
@ user217895是的,我意識到,我已經重寫了我的答案。 – unwind
當我將int add_server()更改爲Server add_server()時。編譯器給出錯誤 – user217895
- 1. Drupal 7:獲取具有相同標記的所有節點ID
- 2. ASP TreeView:所有節點都有相同的ID
- 3. 節點的KineticJS ID
- 4. 加入兩個沒有ID的節點
- 5. 獲取所選節點ID
- 6. Neo4jClient節點ID
- 7. 到的XElement添加節點作爲最後一個節點
- 8. 合併具有相同ID且包含所有孩子的節點的孩子
- 9. Cypher - 獲取與起始節點ID,末尾節點ID和類型的關係
- 10. 現有節點添加到另一個節點的子節點
- 11. xml節點父ID#
- 12. 獲取父節點有ID的子節點
- 13. 獲取html的所有節點並將新coustom ID應用於每個節點
- 14. ElasticSearch VM克隆 - master_not_found_exception,發現存在具有相同ID的節點,但不同的節點實例
- 15. 最後一個節點值鏈表更新所有節點
- 16. 將節點添加到具有相同節點名稱但具有不同屬性的xml文件與Python Dom
- 17. 添加與現有節點的關係
- 18. 添加節點到節點XML dom4j的
- 19. Umbraco:根據節點ID獲取根節點ID
- 20. xsl generate-id()函數爲不同節點返回相同的id兩次
- 21. 收購有以「ABC」開頭的ID的所有節點
- 22. 使用節點ID查找圖的子集(必須包括所有連接到ID的節點)
- 23. XSL將所選節點的子節點與模板相關聯
- 24. 遍歷jstree搜索的節點ID的所有出現,然後改變類的那些節點的
- 25. 在添加新節點的同時更新節點的位置?
- 26. 節點ID可以不同於節點標籤
- 27. JTree顯示與子節點相同的節點
- 28. 添加SceneKit相機節點消失我的主節點
- 29. 添加相對於TreeView選定節點的新節點
- 30. 使用neo4jphp獲得與主節點相關的所有節點的數組
你可以添加一些文字代碼,描述超出了相當簡潔的標題問題? – cnicutar
您不會爲'add_server'中的'server_id'分配內存。你在調用函數中分配內存還是繼續更新相同的char數組?後者意味着所有節點都指向相同的'server_id'實例,因此所有節點都將更新它們的ID。 – simonc