私は、昇順でユーザーから数字を受け取り、使用した一意の番号が何であるかを示すリンクリストを作成して練習しています。 findUnique関数とwhileループをインクルードした後にセグメンテーション違反が発生し続けると、何も印刷されないうちにリストを出力するように設定されています。 これはリンクされたリストの練習なので、どんな助けもありがとうございます。リンクされたリストのセグメンテーションフォールト
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct number{
int num;
struct number* next;
}Number;
Number *addterm(Number*, int);
void findUnique(Number*);
int main(void){
Number *Number_List = NULL;
int digit = 1;
printf("Enter numbers in ascending order(enter 0 to stop): ");
scanf("%d", &digit);
while(digit != 0){
addterm(Number_List, digit);
printf("Enter numbers in ascending order(enter 0 to stop): ");
scanf("%d", &digit);
}
printf("\ntest 1\n");
Number *ptr = Number_List;
while(ptr){
printf("%d ", ptr -> num);
Number_List = ptr -> next;
}
printf("\ntest 2\n");
printf("\n");
findUnique(Number_List);
return 0;
}
Number *addterm(Number* list, int userIn){
Number *newNum = (Number *) malloc (sizeof (Number));
newNum->num = userIn;
newNum->next = list;
if(list == NULL){
return newNum;
}
Number *ptr = list;
while(ptr->next != NULL){
ptr = ptr->next;
}
ptr->next = newNum;
return list;
}
void findUnique(Number* list){
int print, temp;
print = list->num;
temp = print;
printf("The unique numbers you entered are %d", temp);
while(list){
print = list->num;
if(print == temp){
continue;
}
else{
temp = print;
printf(" %d", temp);
}
list = list -> next;
}
return;
}
ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –