2011-11-11 3 views
0
temp = Head; 
while (Head != NULL) { 
    Head = temp->nextPtr; 
    free(temp); 
} 

내 프로젝트에서는 임시 목록을 연결하고 동시에 링크 된 목록의 모든 요소를 ​​제거하려고하지만 컴파일러는 세그먼트 오류를 ​​제공합니다.연결된 목록의 모든 요소를 ​​제거하십시오.

+1

코드에서 동일한 노드를 자유롭게 유지 하시겠습니까? 임시 포인터는 while 루프 내부에서 전혀 변하지 않습니다. – dip

+0

이 샘플 코드는 작동하지 않습니다. – justuser

답변

5

루프의 시작 또는 끝 부분에 temp=Head; 어딘가에 첫 번째 헤드에 temp가 없습니다.

가장 쉬운 방법은 루프 앞에있는 temp=Head;을 루프 내부의 첫 번째 줄로 이동하는 것입니다.

while (Head != NULL) { 
    temp = Head; 
    Head = temp->nextPtr; 
    free(temp); 
} 
1

저는 컴파일러가 Segmentation Fault을 제공한다고 생각하지 않습니다. 꽤 끔찍한 입력에도 불구하고 segfault해서는 안됩니다. 내 생각에 프로그램이 segfault를 일으키고 있다고 생각합니다. 루프의 본문에 temp을 설정하는 것을 게을리했습니다.

관련 문제