私はこの単独リンクされたリストの問題の助けを得ることができるかどうか疑問に思っています。すべてのノードが同じ文字配列を指しているのはなぜですか?
私は、次のポインタと各ノードを形成するためのcharポインタを持つ単純な構造体を持っています。私の主な機能で
struct node{
char * nodeName;
node * next;
}
、私は新しいノードにそれが呼び出されるたびに作成する関数に送信される名前と呼ばれる文字の動的に割り当てられた配列を、作成し、新しい名前がで入力されたことになっていますその都度ユーザーが作成された新しいノードに割り当てられるはずですが、何らかの理由ですべてのノードが最終名を入力します。
私の推測では、すべてのノードはすべて同じchar配列を指していますが、これを修正する方法はわかりません。ここに私のコードです。
int main()
{
char * name = new char[MAX_SIZE]; // dynamic array declaration;
for(int i = 0; i < 3; ++i) // do it x number of times.
{
cout << "Enter Node Name" << endl;
cin.get(name, MAX_SIZE, '\n');
cin.ignore(200, '\n');
addNode(name);
}
return 0
}
void addNode(name[])
{
if(!head){ // creates a first node,
head = new node;
head->next = NULL;
head->nodeName = "default node";
}
node * current = head;
node * newNode = new node;
newNode->name = name;//assign user inputed name.
newNode->next = NULL // set next pointer to null
while(current->next)
current = current->next; // traverse to the last node;
current->next = newNode; // connect the new node at the end.
}
コードはリストを作成しますが、すべてのノードの名前は、ユーザーが入力した最後の文字配列と同じです。 提案がありますか?
addNodeに名前のコピーを作成する必要があります。最も簡単なのは、nodeNameをstd :: stringにすることです。 – pm100
あるいは、char * name = new char [MAX_SIZE] '*をループ内に移動してください。正直なところ、 'std :: string'を使用するのは確かに正しいアプローチです。 – WhozCraig