リンクリストがC++でどのように動作するかを理解するためのコードをいくつか作成しました。プログラムが終了する前に、エラーが「非ゼロステータスで終了」と表示されます。私は現在、オンラインコンパイラrepl.itを使ってC++コードをテストしていますが、この問題が関連しているかどうかはわかりません。どのように私はそれを修正するのですか?ここに私のコードです。詳細は詳細detailsdetails詳細detailsdetails詳細detailsdetails詳細detailsdetails詳細を詳述非ゼロステータス(repl.it)で終了C++?
#include <iostream>
#include <string>
using namespace std;
struct node{
int data;
node* next;
};
int main()
{
node* n; //new
node* t; //temp
node* h; //header
n=new node;
n->data=1;
t=n;
h=n;
cout <<"Pass 1"<<endl;
cout <<"t=" << t << endl;
cout <<"n=" << t << endl;
cout <<"h=" << h << endl;
cout << n->data << endl;
n=new node;
n->data=2;
t->next=n;
t=t->next;
cout <<"Pass 2"<<endl;
cout <<"t=" << t << endl;
cout <<"n=" << t << endl;
cout <<"h=" << h << endl;
cout << n->data << endl;
n=new node;
n->data=3;
t->next=n;
t=t->next;
cout <<"Pass 3"<<endl;
cout <<"t=" << t << endl;
cout <<"n=" << t << endl;
cout <<"h=" << h << endl;
cout << n->data << endl;
//Test pass
//exits with non-zero status
//NULL to pointer means invalid address; termination of program?
n=new node;
t=t->next;
n->data=4;
t->next=n;
n->next=NULL;
cout <<"Pass 4"<<endl;
cout <<"t=" << t << endl;
cout <<"n=" << t << endl;
cout <<"h=" << h << endl;
string a;
a="End test";
cout << a << endl;
return 0;
}
の詳細を出力するには、この時点t
で
Pass 1
t=0x12efc20
n=0x12efc20
h=0x12efc20
1
Pass 2
t=0x12f0050
n=0x12f0050
h=0x12efc20
2
Pass 3
t=0x12f0070
n=0x12f0070
h=0x12efc20
3
exited with non-zero status
あなたは「パス4」で物事を行うれる*オーダー*を確認してください。そこでは初期化されていないポインタを参照解除します。将来、このような問題を発見するには、まずデバッガを使用してください。 –
あなたの問題にかかわらず、 'new'を自由に使用しないでください。 'new 'を使うたびに、常に' delete'する必要のあるメモリを動的に割り当てます。範囲外になったときに 'node'を自動的に削除するラッパークラス' unique_ptr 'を使用するか、' new'を内部的に使用する 'add_next'メソッドを' node'クラスに与え、 '〜node'を実行しますdo'次を削除する。後のケースでは、例外安全なコードを書くことに注意する必要があります。なぜなら、これは 'unique_ptr'ソリューションを好むべき理由です。 –
patatahooligan
'n ='行に一貫して 't'を表示しています。コピーと貼り付けが多すぎますか? – molbdnilo