ここで .h プロトタイプを使用して双方向リンク リストの実装を作成しました。ターミナルに値を入力し始めるまで、すべて正常に動作します。2 番目の値を入力するとセグメンテーション違反が発生しますが、1 つの値を使用しただけでは正常に実行されます。何度かやり直しましたが、間違いが見つかりません。エラーが発生する理由を見つけるのを手伝ってもらえますか?
.h ファイルは次のとおりです。
#include <stdio.h>
typedef struct node Node;
struct node
{
int d;
Node *link;
}*head,*current,*prev;
int num_nodes;
void linked_list_init(int data);
void linked_list_sort();
void linked_list_print();
.c ファイルは次のとおりです。
#include "link.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void main(){
int n,e,i;
printf("How many numbers do you want to sort: ");
scanf("%d",&e);
for(i=0;i<e;i++){
printf("Enter number: ");
scanf("%d",&n);
linked_list_init(n);
}
linked_list_sort();
printf("The sorted numbers are: ");
linked_list_print();
}
void linked_list_init(int data){
Node *prev=0,*next=0;
current=(Node*)malloc(sizeof(Node));
if(head==0)
{
head=current;
current->d=data;
current->link=0;
prev=current;
}
else{
current->d=data;
current->link=0;
prev->link=current;
prev=current;
}
}
void linked_list_sort(){
int i,j;
Node *prev=0,*next=0;
current=head;
prev=head;
next=head->link;
for(i=0;i<num_nodes-1;i++)
{
for(j=0;j<num_nodes-i-1;j++)
{
if(current->d>next->d)
{
current->link=next->link;
next->link=current;
if(current==head)
{
head=next;prev=next;
}
else
{
prev->link=next;prev=next;
}
if(next!=0) //check whether final node is reached
next=current->link;
}
else //move each node pointer by one position
{
prev=current;
current=next;
next=current->link;
}
}
//next iteration
current=head;
prev=head;
next=current->link;
}
}
void linked_list_print(){
current=head;
while(current!=0){
printf("%d ",current->d);
current=current->link;
}
}