In C und vielen anderen Programmiersprachen wird der Stack (Stapelspeicher) verwendet, um Informationen über Funktionen zu speichern, während sie ausgeführt werden. Das sind z.B lokale Variablen, Funktionsparameter und die Rückkehradressen.
void test(int x) {
int y = x; // lokale Variable "y" wird auf dem Stack gespeichert und gelöscht wenn die Funktion beendet ist
}
Wenn eine Funktion aufgerufen wird, werden die lokalen Variablen und die Rücksprungadresse auf dem Stack abgelegt. Wenn die Funktion beendet wird, werden diese Informationen wieder vom Stack entfernt. Wenn jedoch zu viele Funktionen verschachtelt sind oder wenn eine Funktion rekursiv aufgerufen wird (das bedeutet, dass sie sich selbst aufruft), kann der Stapelspeicher erschöpft sein.
void test(int x) {
int y = x; // lokale Variable
test(x); // Funktion ruft sich selbst auf
}
Diese Funktion ruft sich immer wieder selbst auf. Wenn die Funktion aufgerufen wird erstellt sie die lokale Variable "y". Danach ruft sie sich selbst auf. Dabei wird ein neuer Stack für die Funkton angelegt. In diesem Stack wird auch wieder eine lokale Variable gespeichert und die Funktion erneut aufgerufen. Und dann wieder, und wieder. Wie du siehst kommt die Funktion nie zur return Anweisung und erstellt in jedem Durchlauf einen neuen Stack mit einer neuen Variable. Irgendwann hasu du keinen Speicherplatz mehr frei und der Prozess wird beendet oder unerwartetes Verhalten zeigen.