Absturz!!!
-
Lass mich raten - du arbeitest (zu) viel mit globalen Variablen.
-
CStoll schrieb:
Lass mich raten - du arbeitest (zu) viel mit globalen Variablen.
Ja, lokale Variablen verlieren doch ihre Gültigkeit nach dem Verlassen einer Funktion. Das möchte ich vermeiden. Ich benutze lokale Variablen nur für temporäre Aktionen wie zum Beispiel Schleifenzähler oder temporäre Pointer. Der Fehler war übrigens nicht darauf zurückzuführen, er hätte sich bei einer lokalen Variable anders bemerkbar gemacht aber Fehler bleibt Fehler!
-
Und das Problem bei globalen Variablen ist, daß du nicht kontrollieren kannst was mit ihnen passiert. Hast du eigentlich schonmal etwas von "Parametern" und "Rückgabewerten" gehört?
-
CStoll schrieb:
Und das Problem bei globalen Variablen ist, daß du nicht kontrollieren kannst was mit ihnen passiert. Hast du eigentlich schonmal etwas von "Parametern" und "Rückgabewerten" gehört?
Natürlich kann man globale Variablen kontrollieren. Funktionsaufrufe mit Parameterübergabe und Rückgabewerten sind doch kein Ersatz für globale Variablen. Wie würdest du es machen, wenn du eine Variable haben willst, die ihren Zustand behalten und die von verschiedenen Funktionen eines Moduls benutzt werden soll?
-
Nein, du kannst nicht kontrollieren, in welcher der vielen Unterfunktionen eine globale Variable verwendet oder geändert wird - mit teilweise sehr weitreichenden Konsequenzen.
Fred vom Jupiter schrieb:
Wie würdest du es machen, wenn du eine Variable haben willst, die ihren Zustand behalten und die von verschiedenen Funktionen eines Moduls benutzt werden soll?
Ich würde sie in der main() lokal anlegen und einen Zeiger/Referenz darauf an die Funktionen übergeben, die etwas damit machen wollen.
-
CStoll schrieb:
Nein, du kannst nicht kontrollieren, in welcher der vielen Unterfunktionen eine globale Variable verwendet oder geändert wird - mit teilweise sehr weitreichenden Konsequenzen.
Das verstehe ich nicht. Ich programmiere übrigens seit einem Jahr in C.
CStoll schrieb:
Fred vom Jupiter schrieb:
Wie würdest du es machen, wenn du eine Variable haben willst, die ihren Zustand behalten und die von verschiedenen Funktionen eines Moduls benutzt werden soll?
Ich würde sie in der main() lokal anlegen und einen Zeiger/Referenz darauf an die Funktionen übergeben, die etwas damit machen wollen.
Aber wenn eine der Funktionen Fehler hat, dann würde sie die Variable auch falsch verändern. Ich sehe in dem Zusammenhang keinen Vorteil von Funktionen.
-
Fred vom Jupiter schrieb:
CStoll schrieb:
Nein, du kannst nicht kontrollieren, in welcher der vielen Unterfunktionen eine globale Variable verwendet oder geändert wird - mit teilweise sehr weitreichenden Konsequenzen.
Das verstehe ich nicht. Ich programmiere übrigens seit einem Jahr in C.
CStoll meint das wohl so, dass jeder andere code zugriff auf die variable mit 'extern' erlangen kann. mach deine globalen variablen einfach 'static', und dann isses okay (dann kannst nur du aus deinem .c-file darauf zugreifen).
-
Das hättest du in C++ aber eleganter lösen können.
-
Mir fällt auch nix ein, wo man ne globale variable braucht, weils anders nicht geht.
-
whydoyouthinktheycallitdo schrieb:
Mir fällt auch nix ein, wo man ne globale variable braucht, weils anders nicht geht.
das meiste geht bestimmt ganz ohne globale variablen, wobei 'globalität' ja eher eine frage der 'extern linkage' ist. aber manchmal sind sie praktisch (lokale variablen landen auf den stack, das will man vielleicht nicht und 'static' variablen innerhalb einer funktion sind von aussen nicht sichtbar). der zugriff auf globale variablen kann übrigens wesentlich schneller sein, als über getter/setter funktionen o.ä.