2014-06-12 2 views
1

이진 삽입 정렬을 연결된 목록에서 구현하려고합니다. 프로그램은 잘 컴파일되고 매 3 시간마다 실행됩니다. 그것은 오류 216 - 일반 보호 오류 (아마도 포인터를 dereferencing하는)를 던집니다. 파스칼에서 링크드리스트로 작업 할 때이 문제가 발생하는 것은 처음이 아니며 무엇이 그 원인이되는지, 때로는 때때로 작동하고 때로는 이해하지 못하는 이유도 없습니다. 어떤 조언을 주셔서 감사합니다.연결된 목록 이진 삽입 정렬, 오류 216, 때때로 작동합니다.

코드 샘플은 here

편집이다 : 범인이 while 루프 어딘가에 있어야합니다 :

while (y^.next <> original.tail) do begin 
    y:=original.takeOutFirst; 
    l := 1; r := i-1; 
    while (l<=r) do begin 
      m := (l+r) div 2; 
      x := sorted.itemNumber(m); 
      if x^.data > y^.data then r:= m-1 
      else l:=m+1 
    end; 
    x := sorted.ItemNumber(l); 
    sorted.insertInsteadOf(x, y); 
    inc(i); 

끝;

+1

질문에 문제를 설명하는 데 필요한 최소 코드를 게시 할 수 있습니까? SO 편집기에서 "코드"버튼을 사용하여 멋지게 형식을 지정할 수 있습니다. – mtrw

+0

'y'가 항상 nil이 아닐 것이라고 보장 할 수 있습니까? –

+0

@PaulNathan 네, 그렇게 생각합니다. y 목록의 모든 요소는 nil이 아니어야합니다. 그냥 꼬리 ^. 다음은 nil이지만 도달해서는 안됩니다. – mirgee

답변

0

샘플 13 행에서 i : = 2를 i : = 1로 변경하면 코드가 기적적으로 작동합니다. 왜?!