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);
끝;
질문에 문제를 설명하는 데 필요한 최소 코드를 게시 할 수 있습니까? SO 편집기에서 "코드"버튼을 사용하여 멋지게 형식을 지정할 수 있습니다. – mtrw
'y'가 항상 nil이 아닐 것이라고 보장 할 수 있습니까? –
@PaulNathan 네, 그렇게 생각합니다. y 목록의 모든 요소는 nil이 아니어야합니다. 그냥 꼬리 ^. 다음은 nil이지만 도달해서는 안됩니다. – mirgee