#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct Node {
int data;
Node* next;
};
struct Node* takeInput(){
struct Node* head;
cout<<"Enter element:";
int data;
cin>>data;
while(data!=-1){
struct Node* newNode=new (struct Node);
newNode->data=data;
newNode->next=NULL;
if(head==NULL){
head=newNode;
}
else{
struct Node* temp=new (struct Node);
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=newNode;
}
cout<<"Enter next element: ";
cin>>data;
}
return head;
}
void print(struct Node* head){
while(head->next!=NULL){
cout<<head->data<<"->";
head=head->next;
}
}
int main(){
struct Node* head = new (struct Node);
head = takeInput();
print(head);
}
セグメント化エラーは、print()関数が実行されるときに発生します。 印刷機能を実行しないと、コードは完全に実行されます。コードはユーザーからの入力を受け取りますが、リンクされたリストを印刷しようとするとクラッシュします。 Linux OSでCode Blocks IDEでgccコンパイラを使用しています。このコードを実行すると、私のコンパイラは私にセグメンテーションフォルトを与えますか?
コンパイラは、あなたが障害をセグメンテーション与えるものではありません。それはそれを "与える"あなたのプログラムです。 –
あなたが 'print'関数に' nullptr'を渡すとどうなりますか? – iehrlich
'while(temp-> next!= NULL){'はメンバーが初期化されていない新しいノードの 'next'をチェックしています。新しいノードを割り当てるのではなく、直前に 'temp = head;'にすることを意味します。 –