Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Endlosschleife (Programmierung)

Eine Endlosschleife ist in der Programmierung eine Schleife, die nach jeder Abarbeitung erneut abgearbeitet wird, falls die Ausführung nicht durch äußere …

Inhalt5 Abschnitte
  1. 1. Begriff und Bedeutung
  2. 2. Ursachen und Erscheinungsformen
  3. 3. Absichtlicher Einsatz
  4. 4. Typische Programmierfehler
  5. 5. Vorbeugung und Begrenzung

Begriff und Bedeutung

Eine Endlosschleife ist eine Schleife, die nach jedem Durchlauf erneut ausgeführt wird, solange kein äußerer Einfluss die Ausführung abbricht. Als äußerer Einfluss gilt ein Eingriff, der im regulären Programmablauf nicht vorgesehen ist, etwa das Abschalten des Computers.

Endlosschleifen können unbeabsichtigt durch Programmierfehler entstehen, aber auch absichtlich eingesetzt werden. Ein wichtiges beabsichtigtes Beispiel ist die Ereignisschleife (englisch event loop oder message dispatcher), die auf Ereignisse wie Benutzereingaben wartet. Solche Schleifen können auch ohne aktives Warten arbeiten.

Ursachen und Erscheinungsformen

Bei Endlosschleifen sind drei Fälle zu unterscheiden:

  • Die Schleife besitzt kein Abbruchkriterium. Das kann beabsichtigt sein und lässt sich beim Debuggen meist leicht erkennen.
  • Das vorhandene Abbruchkriterium kann niemals erfüllt werden.
  • Das Abbruchkriterium wird nur bei bestimmten Eingangsparametern nie erfüllt. Dieser meist unerwünschte Fall kann schwer zu finden sein, weil er möglicherweise nur selten auftritt. Eine Ursache ist, dass der Programmzustand zu Beginn der Schleife die Schleifeninvariante nicht erfüllt. Eine Schleifeninvariante ist eine Bedingung, die bei jedem Schleifendurchlauf erhalten bleiben soll.

Die Folgen hängen vom Schleifenrumpf ab. Werden dort wiederholt Ressourcen wie Hauptspeicher belegt, aber nicht freigegeben, entsteht im Allgemeinen ein Speicherleck. Eine Endlosschleife kann sich gegenüber dem Benutzer auch als Inaktivität oder „Einfrieren“ des Programms zeigen.

Absichtlicher Einsatz

Geräte, für die kein geordnetes Herunterfahren vorgesehen ist, besitzen häufig mindestens eine Endlosschleife, die im Grundzustand auf Benutzereingaben wartet.

Auch auf Computersystemen mit Möglichkeiten zum geordneten Programmabbruch werden Endlosschleifen gezielt verwendet. In Multitasking-Systemen sind Ereignisschleifen üblich, die fortlaufend auf Benutzereingaben warten. Bei einem Singletasking-System kann höchstens eine solche Schleife gleichzeitig arbeiten. Beendet werden diese beabsichtigten Endlosschleifen durch die vom System bereitgestellten äußeren Abbruchmöglichkeiten.

Typische Programmierfehler

Typische Beispiele sind:

  • Eine Variable wird in der Schleife nicht verändert: Beginnt number bei 0 und lautet die Bedingung number < 10, bleibt sie ohne ein Inkrement wie number += 1 dauerhaft wahr.
  • Bei Gleitkommazahlen kann eine scheinbar erreichbare Abbruchbedingung verfehlt werden: Wird number ausgehend von 0.1 immer um 0.1 erhöht und auf number != 1.0 geprüft, wird 1.0 nie exakt erreicht, weil 0.1 in binärer Form periodisch ist.
  • Eine Rekursion ohne erreichbare Abbruchbedingung ruft sich immer wieder selbst auf. Sie endet schließlich mit einem Stapelüberlauf und dem Absturz des Programms.
  • Eine Bedingung wie while (true) ist immer wahr. Enthält die Schleife jedoch eine erreichbare break-Anweisung, ist sie keine Endlosschleife mehr.
  • Ein unbedingter Sprungbefehl kann immer wieder zu derselben Stelle zurückspringen. Ohne einen bedingten Sprung zum Programmende wird dieser Ablauf nie verlassen.

Vorbeugung und Begrenzung

Zur Vorbeugung kann die Schleifenbedingung formal verifiziert werden, beispielsweise mit dem wp-Kalkül. Dabei wird mathematisch geprüft, ob die gewünschten Bedingungen des Programms erfüllt werden. Dieses Verfahren ist schon bei kleinen Programmen sehr aufwändig; allgemein ist die Frage, ob ein Programm anhält, wegen des Halteproblems sogar unlösbar.

Ein Watchdog verhindert Endlosschleifen nicht, kann ihre Auswirkungen aber zeitlich begrenzen. Er überwacht, ob ein Programm regelmäßig signalisiert, dass es ordnungsgemäß läuft. Bleibt dieses Signal aus, kann der Watchdog reagieren, etwa den Benutzer benachrichtigen oder das Programm beenden.

Weiterlesen

Programmierung Beim Programmieren sind wesentliche Aspekte zur Softwarequalität zu berücksichtigen und durch die Gestaltung des Quellcodes umzusetzen. Siehe dazu als Beispiele … Schleife (Programmierung) Eine Schleife (auch „Wiederholung“ oder englisch loop) ist eine Kontrollstruktur in Programmiersprachen. Sie wiederholt einen Anweisungs-Block – den … Computer Ein Computer (englisch; deutsche Aussprache [kɔmˈpjuːtɐ]) oder Rechner ist ein Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet. Abbruchbedingung Eine Abbruchbedingung ist in der Informatik eine Bedingung, die erfüllt sein muss, damit ein Vorgang beendet wird. Jede Schleife oder rekursive Funktion … Debugger Funktionen eines Debuggers · die Steuerung des Programmablaufs, insbesondere durch Haltepunkte und die Einzelschritt-Verarbeitung von Befehlen · das Inspizieren … Ressource Eine Ressource kann ein materielles oder immaterielles Gut sein. In Betriebswirtschaft, Volkswirtschaft und Organisationen werden darunter meist Betriebsmittel, … Arbeitsspeicher Zugriffe auf den Arbeitsspeicher durch den Hauptprozessor werden zumeist über ein oder mehrere Pufferspeicher oder Cache-RAMs (kurz „Cache“) optimiert. Im Cache … Multitasking Der Begriff Multitasking [ˌmʌltiˈtɑːskɪŋ] (engl.) bzw. Mehrprozessbetrieb bezeichnet die Fähigkeit eines Betriebssystems, mehrere Aufgaben (Tasks) … Iteration Iteration (von lateinisch iterare ,wiederholen') beschreibt allgemein einen Prozess mehrfachen Wiederholens gleicher oder ähnlicher Handlungen zur … Rekursion Als Rekursion (lateinisch recurrere ‚zurücklaufen') wird ein prinzipiell unendlicher Vorgang bezeichnet, der sich selbst als Teil enthält oder mithilfe von sich … Halteproblem Das Halteproblem beschreibt eine Frage aus der theoretischen Informatik. Wenn für eine Berechnung mehrere Rechenschritte nach festen Regeln durchgeführt …