2017-09-28 175 views
0

我做了一些代碼,以瞭解鏈接列表如何在C++中工作,並且在程序終止之前它說錯誤「退出非零狀態」。我目前使用在線編譯器repl.it來測試C++代碼,我不確定這個問題是否相關。我如何解決它?這是我的代碼。詳細詳細詳細詳細細節細節細節細節細節細節細節細節細節細節細節細節詳情詳情退出非零狀態(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; 
} 

輸出是

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'時,都會動態分配內存,您必須始終「刪除」。可以使用'unique_ptr ',這是一個封裝類,它在超出作用域時自動刪除節點,或者給你的節點類添加一個'add_next'方法,在內部使用'new'並使'〜node'做'刪除下一個'。在後面的例子中,你必須小心編寫異常安全的代碼,這就是爲什麼你應該更喜歡'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; 

此時t是你創建的第三個節點,此時該節點沒有任何價值的是next屬性。

您可以使用調試器GDB看更容易這樣那樣的問題(但也許在您的在線編譯器,你可以不)

+0

有道理,謝謝! – user136128

相關問題