2011-09-18 2 views
1

C에서 연결된 목록 프로그램을 만들고 있는데 세그먼트 오류가 계속 발생합니다. 문제를 코드 몇 줄로 좁혔으며 NULL을 확인하는 것과 관련 있다고 생각합니다. 이 문제를 어떻게 해결할 수 있습니까?NULL 세그먼트 화 오류를 제거하려면 어떻게해야합니까?

+0

사이드 노트에서 ...이 deleteNode 함수가 링크 된 목록에서 노드를 삭제해야하는 경우에는 삭제할 수 없습니다. 삭제하려는 노드에 대한 포인터 만있는 단일 좋아하는 목록에서 노드를 삭제할 수 없습니다 (루트 노드가 전역 또는 코스에 액세스 할 수있는 경우 제외) –

답변

7

currentNodedeleteNode()의 시작 NULL하지 있는지 확인하기 위해 검사를 시도

typedef struct node 
{ 
    int contents; 
    struct node *nextNode; 
} Node; 



deleteNode(Node *currentNode) 
{ 

    while((currentNode->contents) != NULL) 
    { 
    //.....Do Stuff..... 
    currentNode = currentNode->nextNode; 
    } 
} 

감사 : 여기에 코드입니다. 나는.

deleteNode(Node *currentNode) 
{ 
    if (currentNode == NULL) return; 
    // ... 
    // ... 
} 
4

문제가 의심스러운 경우 currentNode은 널 포인터입니다. 액세스를 시도하기 전에 currentNode이 null이 아닌지 확인하십시오. ... 나는이 것을 추측 할

while((currentNode->contents) != NULL) 

NULL와 함께 int 당신의 Node 구조의 contents 필드를 비교한다 :

deleteNode(Node* currentNode) 
{ 
    while ((currentNode != NULL) && (currentNode->contents != NULL)) 
    { 
     /* ... */ 
     currentNode = currentNode->nextNode; 
    } 
} 
0

글쎄, 나는이 선 것을 의심 해요 그 대신에 currentNode->nextNode를 점검하고 있어야한다!

아마도 contents 중 아무 것도 0이 아니므로이 테스트는 목록의 모든 항목에 해당됩니다. 그런 다음 마지막 항목은 에 할당 된 NULL currentNode->nextNode을 가지며 다음에 루프를 반올림 할 때 참조 해제합니다.

0

currentNode가 NULL 일 때 어떻게됩니까? while 조건에서 NULL 메모리를 역 참조합니다.

관련 문제