ノード (整数データ) を作成して SLL に挿入するために、C++ で次のコードを書きました。
#include <stdio.h>
class Node
{
public:
int data;
Node * next;
Node * first;
Node() {}
void insert(int dat)
{
Node * newnode = new Node();
newnode->data=dat;
newnode->next=NULL;
if(first==NULL)
{
first=newnode;
}
else
{
Node *temp=first;
while(temp->next!=NULL)
{ temp=temp->next; }
temp->next=newnode;
}
}
};
int main()
{
Node * a=new Node();
a->insert(12);
return 0;
}
最初に、Node コンストラクターを Node(int dat) にオーバーライドしようとしました。その中で、挿入で作成するすべての新しいノード (data=dat、next=NULL) の初期化を試みました。Insert は main から "dat" 値で呼び出され、オーバーロードされた Node コンストラクターを呼び出して、データを dat および NULL に初期化します。それが私のプログラムのクラッシュにつながりました。
そこで、デフォルトのコンストラクターとオーバーロードされたコンストラクターの両方を取り出し、挿入自体で新しい各要素の初期化を行いました。私のプログラムは正常に動作します。ただし、(コードの 10 行目に示されているように) デフォルトのコンストラクターを追加しても、プログラムがクラッシュします。両方のケースでなぜこれが起こっているのか誰か教えてもらえますか?
ありがとう。