저는 C (및이 사이트)를 처음 접했고 세그멘테이션 오류와 관련하여 많은 문제가 있습니다. 연결된 숫자 목록을 만들고 오름차순으로 값을 삽입하는 프로그램을 작성했습니다.C 프로그래밍 세분화 오류 연결 목록 프로그램
void insert(struct element **head, struct element *new){
if((*head)->next == NULL && (*new).i > (*(*head)->next).i){
(*head)->next = new;
return;
}
if((*head)->next == NULL && (*new).i < (*(*head)->next).i){
new->next = (*head)->next;
*head = new;
return;
}
struct element *prev = *head;
struct element *current = (*head)->next;
while(current->next != NULL){
if((*new).i < (*current).i){
prev = current;
current = current->next;
} else if((*new).i > (*current).i){
new->next = current;
prev->next = new;
}
}
}
int main (void){
struct element **head;
int value;
printf("%s", "TEST");
printf("%s" , "Please type in an integer value. ");
scanf("%d" , &value);
printf("%s", "TEST");
do{
printf("%s", "TEST");
struct element *new;
if((new = malloc(sizeof(struct element))) == NULL){
return(NULL);
}
printf("%s", "TEST");
(*new).i = value;
printf("%s", "TEST");
if(head == NULL){
*head = new;
printList(*head);
} else if(value <= 0){
printListBackwards(*head);
}
else {
insert(head, new);
printList(*head);
}
} while(value > 0);
논리가 삽입되는 것과 맞는지 여부에 대한 도움이 필요하지 않습니다. 내가 프롬프트 후에 정수를 입력하면 즉시 세그먼트 오류가 발생하기 때문에 실제로 테스트 할 기회조차 없었습니다. 내가 펑키 보이지만, 스펙은 당신이 구조체 (링크 된리스트의 머리 부분)에 대한 포인터에 대한 포인터를 사용하도록 요구한다.
코드를 공유 할 때 다른 사용자가 코드를 빠르게 컴파일하고 오류를 재현 할 수 있는지 확인하십시오. 당신의 코드는 구조 정의, 함수 그리고 심지어'main' 함수에서 닫는 중괄호가 빠져 있습니다. 또한 도움을 청하기 전에 컴파일 할 때 코드에 경고/오류가 표시되지 않는지 확인하십시오. '-Wall -Wextra' 플래그로 컴파일 해보십시오. segfaults를 알아 내면 나는 valgrind가 매우 유용한 도구라고 생각합니다. 디버깅 심볼을 생성하기 위해'-g' 플래그로 컴파일하는 것을 기억하십시오 –