2017-09-28 9 views
0

リンクリストが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 
+2

あなたは「パス4」で物事を行うれる*オーダー*を確認してください。そこでは初期化されていないポインタを参照解除します。将来、このような問題を発見するには、まずデバッガを使用してください。 –

+0

あなたの問題にかかわらず、 'new'を自由に使用しないでください。 'new 'を使うたびに、常に' delete'する必要のあるメモリを動的に割り当てます。範囲外になったときに 'node'を自動的に削除するラッパークラス' unique_ptr 'を使用するか、' new'を内部的に使用する 'add_next'メソッドを' node'クラスに与え、 '〜node'を実行しますdo'次を削除する。後のケースでは、例外安全なコードを書くことに注意する必要があります。なぜなら、これは 'unique_ptr'ソリューションを好むべき理由です。 – patatahooligan

+0

'n ='行に一貫して 't'を表示しています。コピーと貼り付けが多すぎますか? – molbdnilo

答えて

1
n=new node; 
    t=t->next; <- error there 
    n->data=4; 
    t->next=n; 
    n->next=NULL; 

で詳細を詳しく説明すると、作成第3ノードと、この時点で、このノードであります値はありませんnext属性です。

あなたがより簡単にこの種の問題を確認するためにGDBとしてデバッガを使用することができます(ただし、多分あなたはできませんオンラインコンパイラで)

+0

意味があります、ありがとうございます! – user136128

関連する問題