Oändlig slinga
Oändlig slinga är inom programmeringen ett programfel där en slinga aldrig avbryts, vilket gör att programmet (eller åtminstone den tråd som kör) slutar svara. FörklaringAntag att vi har en mängd textsträngar som indexeras med heltalen 0, 1, ..., n. För att erhålla strängen med index index := 0;
while TextExists(index) do
begin
writeln(GetText(index));
index := index + 1;
end;
Första raden sätter index := 0;
while TextExists(index) do
begin
writeln(GetText(index));
end;
Det som då händer är att Tolkning av begreppet "oändlig"Koden nedan ser ut som ett typexempel på en oändlig slinga: i := 0;
while 1+1=2 do
begin
i := i + 1;
end;
Eftersom påståendet Andra typer av oändliga slingorDen typ av oändlig slinga som beskrevs ovan handlar om en egentlig slinga som aldrig avbryts. En liknande typ av bugg, som också kan kallas oändlig "slinga", inträffar då en serie av rekursiva funktionsanrop aldrig avslutas. Namnet "oändlig slinga" motiveras av att effekten av buggen liknar den som erhålles vid en egentlig oändlig slinga. Betrakta exemplet nedan. function DoSomething(x: integer);
begin
result := DoSomething(x);
end;
När funktionen Notera emellertid att rekursiva funktionsanrop inte måste ge upphov till oändliga slingor, utan detta sker endast om rekursionen aldrig avbryts. Koden nedan visar hur en rekursiv metod kan användas för att beräkna fakultet: function Fact(n: integer);
begin
if n = 0 then
result := 1
else
result := n*Fact(n-1);
end;
Oändliga slingor i gamla operativsystemI äldre operativsystem, såsom Windows 9x-system, kan en oändlig slinga i ett program få hela systemet (datorn) att sluta svara. Se även |