Funktionsbegrenzung?

Posted By: preacherX

Funktionsbegrenzung? - 07/19/17 14:56

Gibt es eigentlich eine Grenze, wie viel Inhalt eine Funktion haben darf? Habe nämlich das Problem, dass wenn ich zu viel in eine bestimmten Funktion schreibe, das Spiel beim Start crasht. Es crasht beim Start obwohl zu diesem Zeitpunkt diese Funktion gar nicht aufgerufen wird. Es gibt auch keine Fehlermeldung, nur Windows meldet sich mit dem üblichen Satz. Wenn ich den Umfang der Funktion reduziere, läuft wieder alles normal. Ich benutze keine lokalen Arrays, ich denke also nicht, dass der Stack zu voll ist.
Posted By: Ayumi

Re: Funktionsbegrenzung? - 07/19/17 16:11

Soweit ich weiß, nein (nur in der breite der Zeilen).
Du solltest vielleicht mal schauen, ob Werte null sind.
Beispielsweise muss bei manchen Funktion, obwohl nicht eindeutig angegeben, while(!player) wait(1); in die erste Zeile geschrieben werden.

Bestenfalls mal die Funktion hier posten.
EDIT:
Ein Bild mit der Fehlermeldung wäre auch sinnvoll. Und eine Aussage, wann du die Funktion wo aufrufst.
Posted By: Superku

Re: Funktionsbegrenzung? - 07/20/17 04:35

Originally Posted By: Ayumi
Beispielsweise muss bei manchen Funktion, obwohl nicht eindeutig angegeben, while(!player) wait(1); in die erste Zeile geschrieben werden.

Dann funktionierte mein Spiel gar nicht, da ich den player-Pointer nicht benutze. wink Soll heißen, diese while Schleife ist nicht erforderlich, sie kaschiert wahrscheinlich eher andere Probleme in deinem Code/ den jeweiligen Funktionen.

@preacherX: Wahrscheinlich die falsche Richtung beim Debuggen dieses Crashes aber... lad dir mal folgendes Programm herunter (zip, keine Installation notwendig): https://technet.microsoft.com/en-us/sysinternals/vmmap.aspx
Starte dein Spiel, lass es crashen, dann starte VMMap und wähle den acknex Prozess aus. Was für Werte stehen dort, insbesondere wie groß ist der Heap-Wert?
Posted By: Ayumi

Re: Funktionsbegrenzung? - 07/20/17 07:20

@ Superku
Danke für den Hinweis, war schon recht verwunderlich grin
Posted By: preacherX

Re: Funktionsbegrenzung? - 07/20/17 10:33

Ich habe hier mal ein simples Beispiel erstellt:

https://1drv.ms/u/s!AnPFFAcZiQdsk71rKQFDwD1Qt6JGNQ

Dort habe ich in der main(); einfach ne riesige while()-Schleife mit vielen if() Abfragen darin erstellt. Beim Starten crasht das ganze dann. Wenn man aber ein paar Zeilen löscht, läuft es...
Posted By: Superku

Re: Funktionsbegrenzung? - 07/20/17 10:55

In der Tat... verblüffend und etwas erschreckend.
(Ich musste die Anzahl an Zeilen erst noch weiter erhöhen, bis es in einem Script-Crash resultierte.)
Posted By: preacherX

Re: Funktionsbegrenzung? - 07/20/17 11:05

Interessant, dass du die Zeilen noch erhöhen musstest... Dann hat es vielleicht auch noch was mit dem eigenen System zu tun? Ist das jetzt ein Bug oder ist es eine unsichtbare Grenze? confused
Posted By: Ayumi

Re: Funktionsbegrenzung? - 07/20/17 14:06

Ich hab das auch mal getestet und der crash kommt nach der doppelten Menge an Zeilen zustande. Am besten wendest du dich mal an JCL.

Aber abgesehen davon sollte eine Funktion auch nicht so riesig sein.
Versuch die Funktion zu separieren. (Stichwort Clean Code)
Posted By: jcl

Re: Funktionsbegrenzung? - 07/21/17 08:20

Es gibt tatsächlich eine Begrenzung für if, while und do. Es ist keine feste Zahl, sondrn der Compiler generiert eine interne Sprungtabelle mit einem Stack, der irgendwann überläuft. Die Grenze ist so hoch, dass sie in der Praxis keine Bedeutung hat, wohl aber bei Funktionen, die maschinell generiert werden. Wir haben das mit Zorro bemerkt, wo die Mustererkennung Code mit tausenden von if-Anweisungen generieren kann. Also bitte vernünftig programmieren.
Posted By: preacherX

Re: Funktionsbegrenzung? - 07/21/17 10:34

Dann hab ich mit meinen nicht maschinell erstellten Monster-Code wohl den Jackpot geknackt! grin Aber Danke für den Hinweis, da muss ich wohl jetzt ein bißchen aufräumen.
© 2024 lite-C Forums