<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Endlosschleife_%28Programmierung%29</id>
	<title>Endlosschleife (Programmierung) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Endlosschleife_%28Programmierung%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Endlosschleife_(Programmierung)&amp;action=history"/>
	<updated>2026-06-12T20:46:59Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Endlosschleife_(Programmierung)&amp;diff=59539&amp;oldid=prev</id>
		<title>imported&gt;Trustable: stil</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Endlosschleife_(Programmierung)&amp;diff=59539&amp;oldid=prev"/>
		<updated>2024-06-02T20:28:20Z</updated>

		<summary type="html">&lt;p&gt;stil&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;Endlosschleife&amp;#039;&amp;#039;&amp;#039; ist in der [[Programmierung]] eine [[Schleife (Programmierung)|Schleife]], die nach jeder Abarbeitung erneut abgearbeitet wird, falls die Ausführung nicht durch äußere Einflüsse abgebrochen wird. Äußere Einflüsse sind dabei solche, die im regulären Ablauf des [[Computerprogramm|Programms]] nicht vorgesehen sind, beispielsweise das Abschalten des [[Computer]]s. Es gibt jedoch auch Programme mit absichtlichen Endlosschleifen, bspw. [[Ereignisschleife]]n ({{enS|event loop}} oder {{lang|en|&amp;#039;&amp;#039;message dispatcher&amp;#039;&amp;#039;}}), darunter solche, die ohne [[aktives Warten]] auskommen.&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
[[Datei:Infinite loop BSOD.jpg|mini|&amp;#039;&amp;#039;Infinite loop&amp;#039;&amp;#039;/Endlosschleife laut [[Blue Screen Of Death]]]]&lt;br /&gt;
Endlosschleifen können bei der [[Programmierung]] durch Fehler entstehen, wenn die [[Abbruchbedingung]] nicht definiert ist oder nicht eintreten kann.&lt;br /&gt;
Genaugenommen ist zu unterscheiden, ob eine Schleife kein Abbruchkriterium &amp;#039;&amp;#039;hat&amp;#039;&amp;#039;, ob es &amp;#039;&amp;#039;nie&amp;#039;&amp;#039; erfüllt ist oder ob dieses nur für bestimmte Eingangsparameter der Fall ist. Der erste Fall wird entweder ganz bewusst gewählt oder kann durch [[Debugger|Debuggen]] des Programms einfach gefunden werden. Der zweite verhält sich konzeptionell ähnlich, der letzte Fall ist fast immer unerwünscht und kann sehr schwer zu finden sein, da er nur sehr selten eintritt. Dies tritt ein, wenn der Zustand des Programms zu Beginn der Schleife die [[Invariante (Informatik)|Schleifeninvariante]] nicht erfüllt.&lt;br /&gt;
&lt;br /&gt;
Fehlerhafte Abbruchbedingungen verursachen häufig unbeabsichtigte Endlosschleifen. Je nach Programm kann sich ein solcher Fehler unterschiedlich äußern. Falls innerhalb des Schleifenrumpfs wiederholt [[Ressource]]n –&amp;amp;nbsp;wie beispielsweise [[Arbeitsspeicher|Hauptspeicher]]&amp;amp;nbsp;– belegt und nicht wieder freigegeben werden, so führt dies im Allgemeinen zu einem [[Speicherleck]]. Endlosschleifen können sich aber auch durch simple Inaktivität des Programms dem Benutzer gegenüber äußern („Einfrieren“).&lt;br /&gt;
&lt;br /&gt;
Bei Geräten, bei denen kein geordnetes Abschalten („Herunterfahren“) vorgesehen ist, gibt es oft zumindest eine Endlosschleife, die in dessen Grundzustand auf Benutzereingaben wartet.&lt;br /&gt;
&lt;br /&gt;
Sofern ein Computersystem Möglichkeiten zum geordnete Abbrechen eines Programms oder Ablaufs bietet, können Programme auch absichtlich Endlosschleifen besitzen. Üblich ist dies bei [[Multitasking]]-Systemen für „Event-Schleifen“, die auf Benutzereingaben warten. Bei einem [[Singletasking]]-System arbeitet allenfalls eine gleichzeitig. Endlosschleifen werden dann über die gebotenen äußeren Abbruchmöglichkeiten beendet.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
* Eine [[Iteration#Informatik|Iteration]], welche die Abbruchbedingung nicht erfüllt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int number = 0;&lt;br /&gt;
&lt;br /&gt;
while (number &amp;lt; 10) {&lt;br /&gt;
    // Hier fehlt ein Inkrement der Variable.&lt;br /&gt;
    // Beispiel: number += 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
double number = 0.1;&lt;br /&gt;
&lt;br /&gt;
while (number != 1.0) {&lt;br /&gt;
    number += 0.1;&lt;br /&gt;
    &lt;br /&gt;
    // Da 0.1 in binärer Form periodisch ist, wird 1.0 nie exakt erreicht.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Eine [[Rekursion]], die keine Abbruchbedingung erreicht. In diesem Fall stürzt das Programm wegen eines [[Stapelüberlauf]]s ab.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void recursion(int number) {&lt;br /&gt;
    // Hier fehlt eine Abbruchbedingung.&lt;br /&gt;
    // Beispiel: if (number &amp;gt;= 10) return;&lt;br /&gt;
    &lt;br /&gt;
    recursion(number + 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Der einfachste Fall für eine Endlosschleife ist eine Schleifenbedingung, die immer wahr ist. Wenn jedoch innerhalb der Schleife eine oder mehrere &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;-Anweisungen stehen, dann ist es keine Endlosschleife mehr.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int number = 0;&lt;br /&gt;
&lt;br /&gt;
while (true) {&lt;br /&gt;
    // Hier fehlt ein Schleifenabbruch.&lt;br /&gt;
    // Beispiel: if (number &amp;gt;= 10) break;&lt;br /&gt;
    &lt;br /&gt;
    number += 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ein Sprungbefehl, der das Programm nie verlässt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int number = 0;&lt;br /&gt;
&lt;br /&gt;
begin:&lt;br /&gt;
&lt;br /&gt;
// Hier fehlt ein bedingter Sprung.&lt;br /&gt;
// Beispiel: if (number &amp;gt;= 10) goto end;&lt;br /&gt;
number += 1;&lt;br /&gt;
goto begin;&lt;br /&gt;
&lt;br /&gt;
end:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gegenmaßnahmen ==&lt;br /&gt;
Um unbeabsichtigten Endlosschleifen in Programmen vorzubeugen, kann die Schleifenbedingung formal verifiziert werden (z.&amp;amp;nbsp;B. mit dem [[wp-Kalkül]]). Das ist jedoch bereits bei kleinen Programmen ein sehr aufwändiger Prozess und im Allgemeinen sogar ein unlösbares Problem (siehe [[Halteproblem]]).&lt;br /&gt;
&lt;br /&gt;
Eine andere Methode, die unbeabsichtigte Endlosschleifen zwar nicht verhindern kann, sie jedoch zeitlich begrenzt, ist ein sog. [[Watchdog]]: Wenn ein Programm nicht mehr regelmäßig signalisiert, dass es vorschriftsmäßig läuft, kann dieser entsprechend reagieren (z.&amp;amp;nbsp;B. den Benutzer benachrichtigen oder das Programm beenden).&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Infiniter Regress]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wiktionary|Endlosschleife}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Wikipedia:Artikel mit Video]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Trustable</name></author>
	</entry>
</feed>