void addPort(s **port, char *port_name){
//s *pointer = malloc(sizeof(s));
s * new_node;
new_node = malloc(sizeof(s));
if (port_name != new_node->name){
new_node->name = port_name;
new_node->next = *port;
*port = new_node;
}
else {
printf("Port %s exists ", port_name);
}
}
所以我有上面的代碼是爲了添加一個元素到鏈表。目前,當我添加一個元素時,發生的所有事情都是添加了一個新元素,並且之前所有元素都被更改爲新元素的值。例如:如果我添加香港,然後打印它將打印「香港」(如預期的),但如果我添加鹿特丹並打印它將打印「鹿特丹,鹿特丹」。任何人都可以看到我的錯誤是什麼?爲什麼指針不斷被覆蓋?
typedef struct port {
char *name;
struct port *next;
struct port *ptr;
} s;
這是結構,如果需要的話。
'new_node-> name'是在'if'聲明未初始化。未定義的行爲。 – melpomene
多重欺騙。 'new_node-> name = port_name;'僅複製指針,以便所有節點具有相同的指針(可能超出範圍),最後一個字符串已輸入。 –
可能在main中傳遞一個靜態字符數組的地址。請發佈主代碼,以便我們可以驗證(對於添加的每個元素,地址都是相同的,因爲它爲每個字符串使用相同的內存位置) –