Warum steht da StackOverflow?

4 Antworten

Auf dem Stack (Spezieller Bereich im Speicher) landen Rücksprungadressen, und wenn du eine unendliche Rekursion baust, dann läuft der irgendwann über.

Wenn du eine Funktion aufrufst, wird die Rücksprungadresse auf dem Stack gelegt. Beim Return wird diese dann vom Stack gelesen, um in die Zeile nach dem Aufruf zu springen (dadurch kann man die Funktion von irgendwo im Code aufrufen und der Rechner weiss, wo er nach der Ausführung der Funktion wieder hin muss). Du rufst in der Return-Zeile jetzt die Funktion erneut auf (mit Graete+1), erst wenn dieser Aufruf abgearbeitet ist, wird das return ausgeführt. Da die gerade aufgerufene Funktion sich auch wieder selbst aufruft kommt der niemals zum return. Stattdessen landet mit jedem Aufruf eine Rücksprungadresse auf dem Stack, der irgendwann voll ist. Evtl. willst do nur "return Graete+1" ?

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin

Der Code führt zu einer Endlosschleife, da die Funktion immer wieder aufgerufen wird (Rekursion) und eine entsprechende Abbruchbedingung fehlt. Dadurch kommt es dann zum StackOverflow.

Woher ich das weiß:Hobby – Entwickle seit ca 5 J. Software in vers. Programmiersprachen

Weil die Funktion, wie sie geschrieben ist, zu endloser Rekursion führt.

Bei jedem Aufruf der Funktion landet die Funktionsvariable (wieder) auf dem Stack, der überläuft, da sich die Funktion unendlichmal selbst aufruft. Das führt zu einem Stapelüberlauf.

Woher ich das weiß:Hobby

Du hast eine endlose Rekursion. Natürlich läuft da der Stack über.

Gutofruto 
Fragesteller
 06.01.2024, 12:08

Welcher Stack?

1
orochi02  09.01.2024, 08:04
@Gutofruto

hat was mit dem speichermodell in java zu tun. informiere dich mal über den java stack

0