사용자로부터 오름차순으로 숫자를 가져 와서 사용한 고유 번호가 무엇인지 알려주는 연결 목록을 작성하여 연습하고 있습니다. 내가 findUnique 함수를 indener 한 후 세그먼테이션 오류가 계속 발생하고, while 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;
}
스택 오버플로에 오신 것을 환영합니다! 디버거를 사용하여 코드를 단계별로 실행하는 방법을 배워야 할 필요가있는 것 같습니다. 좋은 디버거를 사용하면 한 줄씩 프로그램을 실행하고 예상 한 곳에서 벗어난 곳을 볼 수 있습니다. 프로그래밍을 할 때 필수적인 도구입니다. 추가 읽기 : [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –