Variabel auf die Zeiger zeigen in Funktionen
-
Hallo,
(Ich finde der einführungssatz klingt etwas abstrakt, aber mir ist nichts besseres eingefallen)
Ich habe folgende Frage:
Bleiben Variabeln die innerhalb von Funktion definiert und deklariert wurden im Speicher intakt, wenn Zeiger außerhalb der Funktion auf sie zeigen? Oder funktioniert das nur mit malloc ?
void TestFunc(int *pTestVar) { int Test = 0; pTestVar = &Test; } void main() { int *pTest; TestFunc(pTest); ... //Kann ich hier mit pTest weiterarbeiten??? }
-
flammenvogel schrieb:
Bleiben Variabeln die innerhalb von Funktion definiert und deklariert wurden im Speicher intakt, wenn Zeiger außerhalb der Funktion auf sie zeigen? Oder funktioniert das nur mit malloc ?
Kurze Antwort: Nein.
Wenn sie nicht static sind, werden sie am Ende des Blockes, in dem sie definiert sind, automatisch zerstört. Man spricht auch von automatischen Variablen (das Schlüsselwort auto wurde ganz früher zur Kennzeichung solcher Variablen verwendet). Mit dynamischen Objekten kann man das natürlich umgehen, weil man bei ihnen die Lebensdauer von Hand festlegen kann. Allerdings wird dafür idR new bevorzugt, malloc gehört in sauberes C++ nicht rein.
-
Weis jemmand zufällig auch obs dann einen Fehler gibt?
-
Nein, das ist ja das Problem. Der Zeiger zeigt immer noch dahin, wo die Variable mal war, es macht sich ja keiner die Mühe, die Variable extra irgendwie zu überschreiben (obwohl das, zumindest im Debug-Modus, vielleicht manchmal ganz sinnvoll wäre). Solange keiner den Platz für was anderes beansprucht, geht also alles glatt. Aber irgendwann änderst du das Programm mal in die Richtung, und kannst nicht mehr nachvollziehen, wieso dir alles um die Ohren fliegt. Finger weg von undefiniertem Verhalten!