Fragen zu Zeigern
-
Hi,
nach stundenlanger Suche im Internet geb ich langsam auf:
Bei den Zeigern verstehe ich so einiges nicht, u. a. warum man Speicherplatz mit new reservieren muss. Tut man das nicht automatisch, wenn man einen Pointer erstellt? Warum muss man den Speicherplatz wieder freigeben? - Die Daten sind doch nur im RAM gespeichert, und gehen somit beim Neustart doch sowieso verloren?
Wie ist das denn nun?
Und gibt es eine einfache Möglichkeit (auch über Zeiger oder einfacher) die Daten dauerhaft zu speichern, und den Speicherplatz erst mit löschen eines Datensatzes (z. B. einer Struktur) freizugeben?
Bin für jede Hilfe dankbar!
Grüße
Sarah
-
- Ein Zeiger ist eigenentlich eine Variable in der eine Adresse gespeichert wird. Für die Adresse wird Speicherplatz reserviert für das Objekt dessen Adresse im Zeiger gespeichert wird nicht. Kann ja sein dass du die Adresse eines bereits vorhandenen Objekts in die Zeiger-Variable stopfen möchtest...
- Der Speicher einer mit new reservieten Speichers muss freigegeben werden, da ansonsten der Computer nicht weiß ab wann er zur Laufzeit des Programms den Speicher freigeben kann. Somit wäre der reservierte Speicher bis zum Ende des Programms blockiert (jenachdem wie lange das Programm läuft kann das ganz schön viel Speicher blockieren).
- Mit new angelegte Daten existieren nach dem Beenden einer Funktion weiter, bis sie mit einem delete gelöscht werden (könnte man z.B. in einem Destruktor machen).
-
Wenn du einen Pointer erstellst (char* p), hast du nur genug Platz, um eine Adresse aufzunehmen. Dieser Pointer kann entweder auf selbst bereitgestellten Speicher (p=new char[...]) oder fremden Speicher (p=&c) verweisen, je nach Bedarf - aber zunächst zeigt er noch nirgends hin.
Wenn du den Pointer benutzt, ohne ihn auf einen definierten Bereich zeigen zu lassen, schreibst du irgendwo in deinen RAM - mit sehr viel Glück stört das niemanden, aber in der Regel zerlegst du damit Daten, die ein anderer Teil des Programms noch benötigt (wenn nicht sogar den Programmcode selber).Und gibt es eine einfache Möglichkeit (auch über Zeiger oder einfacher) die Daten dauerhaft zu speichern, und den Speicherplatz erst mit löschen eines Datensatzes (z. B. einer Struktur) freizugeben?
Indem du sie (über fstream oder FILE*) in eine Datei speicherst.
-
das hat mir fürs erste einiges weiter geholfen. nun bin ich mal gespannt, ob ich das in der praxis auch hinbekomme.
das mit dem in eine datei speichern werde ich wohl erstmal lassen. jetzt mach ich das erstmal so.
tausend dank euch beiden!
-
Mit dauerhaft speichern meinstest du aber nicht, Variablen nur solange zu speichern, bis das Programm beendet wird oder? Weil wenn ja, dann könntest du die Variablen doch auch global deklarieren.
-
Du meinst doch sicher statisch und nicht global...

-
Und ich dachte, das wäre das gleiche oO
-
Globale Variabeln sind statisch, aber du kannst aber auch innerhalb von Funktionen und Klassen statische Variablen deklarieren (und die sind meiner Meinung nach nicht global).

Wobei wir das mit den globalen Variablen, genauso wie die statischen Variablen innerhalb von Funktionen als gute C++-Programmierer gleich wieder vergessen und brav objektorientiert wie wir sind nur Klassenvariablen verwenden.
