C++에서 어떻게 링크 된 목록이 작동하는지 이해할 수있는 코드를 만들었고 프로그램이 종료되기 전에 "0이 아닌 상태에서 종료되었습니다"라는 오류 메시지가 나타납니다. 현재 온라인 컴파일러 repl.it C++ 코드를 테스트하는 데 사용하고,이 문제가 관련되어 있는지 잘 모르겠습니다. 어떻게 고칠 수 있니? 여기 내 코드가있다. 세부 세부 세부 세부 세부 세부 세부 사항 detailsdetails detailsdetails detailsdetails detailsdetails 세부 세부0이 아닌 상태 (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
이 * 주문 확인 (당신은 할 수 없지만 어쩌면 온라인 컴파일러) 디버거를 사용할 수 있습니다. 거기에 초기화되지 않은 포인터를 역 참조하십시오. 장래에 이러한 문제를 발견하려면 먼저 디버거를 사용하십시오. –
당신의 문제에 상관없이'new'를 그렇게 자유롭게 사용하지 마십시오. 'new '를 사용할 때마다 항상'delete'해야하는 메모리를 동적으로 할당합니다. 범위를 벗어날 때'node'를 자동으로 삭제하는 wrapper 클래스 인'unique_ptr'를 사용하거나 내부적으로'new'를 사용하는'add_next' 메소드를'node' 클래스에주고'~ node'를 만드십시오 do do' 다음을 삭제하십시오. 후자의 경우에는 예외 안전 코드를 작성하는 데주의해야합니다. 따라서 'unique_ptr'솔루션을 선호해야합니다. –
patatahooligan
'n'행에't'를 일관되게 인쇄하고 있습니다. 복사 및 붙여 넣기가 너무 많습니까? – molbdnilo