0

ubuntu 13.04 の gcc コンパイラでリンクされたリストを作成するために次の C プログラムを実行すると、次のメッセージが表示されます: Segmentation fault (core dumped) , after the list elements are input from the user , without forward. 親切に助けてください。

#include<stdio.h>
#include<stdlib.h>
int main()
{

/* creating a singly linked list,displaying its elements and finding the sum and average of its elements and searching a particular element in it */

typedef struct node
{
   int info;
   struct node *next;
}N;


N *ptr,*start,*prev;
int i,n,x;
ptr=NULL;
start=NULL;
prev=NULL;  

printf("Enter the number of list elements:  ");      
scanf("%d",&n); 

prev = (N*)malloc(sizeof(N));
start = (N*)malloc(sizeof(N));                                     

for(i=0;i<n;i++)
{
   ptr= (N*)malloc(sizeof(N));
   prev->next = ptr;
   printf("enter the %dth element\t\n",(i+1));
   scanf("%d",&x);
   ptr->info = x;

   if(start==NULL)
   {
      start=ptr;
      prev=ptr;
      ptr->next = NULL;
   }
   else
   {
      prev=ptr;
   }
}                          /* linked list created consisting of n nodes */


/* finding sum and average*/

int sum=0;
float avg;
ptr=start;
for(i=0;i<n;i++)
{
   sum =sum + ptr->info;
   ptr = ptr->next;
}
avg = (float)sum/n;             /* summing and averaging completed */

/* displaying data */

ptr=start;
printf("\n The list elements are :  ");
while(ptr != NULL)
   printf("%d\t",ptr->info);
printf("\n");
printf("The sum of list elements is:  %d",sum);
printf("The average of list elements is:  %f",avg);


return 0;
}
4

2 に答える 2

1

あなたがするつもりだったように見えます

    start = NULL; 
    prev = NULL;

最初に、そしてまた正しい -

  prev->next = ptr;

  if (prev != NULL)
      prev->next = ptr;

または、else セクション (prev = ptr の前) に移動します。

このようにして、最初の繰り返しは最初の要素を開始点にし、次の繰り返しは前の要素を現在のptrに向けます。

ちなみに、リンクされたリストの中には、メンテナンスを簡単にするためにダミーの「アンカー」要素を保持するものがありますが、あなたの場合、最初の要素からデータが既に表示されることを期待しています。

于 2013-09-09T10:20:38.473 に答える