2014-12-07 2 views
-1

다음 함수 중 하나를 실행하면 세그먼트 화 오류가 발생합니다. 나에게는 그들이 일해야하는 것처럼 보인다. malloc을 사용하는 방식과 관련이 있다고 생각합니다. 어떤 파일이 오류를 일으키고 있는지 지적 할 수 있다면, 나는 영원히 감사 할 것입니다.프로그래밍에서 세그먼트 오류 연결 목록

기능 자체는 매우 자명합니다. 첫 번째 파일에서 파일을 읽고 링크 된 목록의 시작 부분에 int를 포함하는 노드를 추가합니다. 두 번째 노드는 동일하지만 노드를 끝에 추가합니다. 세 번째 노드는 연결된 목록에서 세 번째 노드를 삭제하고 마지막 노드는 마지막 노드를 삭제합니다.

LinkedList readAndAddToStart(LinkedList list, FILE *inputFile) { 
    LinkedList head; 
    head = (LinkedList)malloc(sizeof(LinkedList)); 
    int num; 
    fscanf(inputFile, "%d", &num); 
    head->data = num; 
    head->next = list; 
    return head; 
} 

LinkedList readAndAddToEnd(LinkedList list, FILE *inputFile) { 
    LinkedList addNode; 
    addNode = (LinkedList)malloc(sizeof(LinkedList)); 
    LinkedList head; 
    head = list; 
    int num; 
    fscanf(inputFile, "%d", &num); 
    addNode->data = num; 
    addNode->next = NULL; 
    while (list->next != NULL) { 
     list = list->next; 
     } 
    list->next = addNode; 
    return head; 
    } 

LinkedList deleteFirst(LinkedList list) { 
    LinkedList temp; 
    temp = list; 
    if (list != NULL) { 
     list = list->next; 
     free(temp); 
     temp = NULL; 
    } 
    return list; 
    } 
LinkedList deleteLast(LinkedList list) { 
    LinkedList head; 
    head = list; 
    if (list != NULL) { 
     while (list->next->next != NULL) { 
     list = list->next; 
     } 
     free(list->next); 
     list->next = NULL; 
    } 
    return head; 
    } 

내 구조체 list가 비어있는 경우 충돌합니다이 BTW

struct ListNode { 
    int data;             
    struct ListNode *next;   
}; 


typedef struct ListNode *LinkedList; 
+1

디버거를 사용하거나 더 나은 valgrind를 사용하여 문제를 찾으십시오. – bmargulies

+0

디버깅 및 모든 컴파일러 경고를 사용하여 프로그램을 다시 컴파일하십시오. 경고 메시지마다 근본 원인을 수정하십시오. 'valgrind'로 프로그램을 실행하고, 그것이 출력하는 에러 메시지를 이해하고 근본 원인을 수정하십시오. 막히면 전체 프로그램의 소스 코드 (http://sscce.org/)와 전체 오류 또는 경고 메시지를 복사하여 귀하의 질문에 붙여 넣은 다음 도움을 요청하십시오. – pts

+0

먼저 어떤 기능을 찾으십시오. 간단합니다. – longdeqidao

답변

2

readAndAddToEnd 것 같습니다. 목록에 정확히 하나의 요소가있는 경우 deleteLast이 중단됩니다.