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に静的文字配列のアドレスを渡します。私たちが確認できるようにメインコードを投稿してください(アドレスはすべての文字列に同じメモリ位置を使用するため追加するすべての要素で同じになります) –