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
檢查*爲了*在你做的事情在「傳4」。您在那裏取消引用未初始化的指針。將來請先使用調試器來發現這些問題。 –
無論你的問題如何,不要使用'new'。每次使用'new'時,都會動態分配內存,您必須始終「刪除」。可以使用'unique_ptr',這是一個封裝類,它在超出作用域時自動刪除節點,或者給你的節點類添加一個'add_next'方法,在內部使用'new'並使'〜node'做'刪除下一個'。在後面的例子中,你必須小心編寫異常安全的代碼,這就是爲什麼你應該更喜歡'unique_ptr'解決方案。 –
patatahooligan
你一直在'n ='行打印't'。太多的複製和粘貼? – molbdnilo