{Porovná dva seznamy.} procedure compareLists(list1, list2 : Tlist) var l1, l2 : Tlist; same : boolean; begin same := false; l1 := list1; l2 := list2; while (l1^.next <> nil) and (l2^.next <> nil) and (same) do begin l1 := l1^.next; l2 := l2^.next; same := l1^.data = l2^.data; end; compareLists := (same) and (l1^.next = nil) and (l2^.next = nil); end;
Zkušené oko už jistě vidí chyby, které tento kód obsahuje. Problém je v podmínce příkazu while. Pokud předáme proceduře prázdný seznam - ukazatel bude nil, stane se toto:
(nil^.next <> nil)
Problém je, že v reálném režimu se to nemusí projevit. Dokonce se může zdát, že kód funguje. Ovšem obecně může takový odkaz obsahovat náhodnou hodnotu. Takto vznikají těžko odhalitelné chyby. V protected módu program při pokusu o něco takového skončí s runtime error. Podmínka v tomto příkladě by měla být takto:
while (l1 <> nil) and (l2 <> nil) and (same) do