我正在尝试在链表中实现二进制插入排序。该程序编译良好,每三次运行一次。它抛出错误216 - 一般保护错误(可能解除引用nil指针)。在使用Pascal中的链接列表时,我不是第一次遇到此问题,但我仍然不知道是什么原因造成的,以及为什么它有时会起作用,有时也不会。谢谢你的任何建议。
代码示例为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);
端;
答案 0 :(得分:0)
在样本中,在第13行,我将i:= 2更改为i:= 1并且代码奇迹般地起作用。为什么呢?!