Hallo, ich hab mal eine Frage bezüglich pointer. Folgendes: void foo() { array_size = ...; // größe wird aus einer Datenbank ermittelt int[array_size]* x; x[0] = new int; x[1] = new int; x[2] = new int; ... .. x[0] = ...; return; } Wenn ich die Funktion verlasse möchte ich nicht das x zerstört wird. Was ich ja damit erreiche, dass ich kein delete [0], x[1], ..., mache. Wenn ich die Funktion allerdings noch einmal aufrufe, dann möchte ich das der Speicher wieder freigegeben wird und neuer Speicher reserviert wird, da ich ja sonst bei ein paar millionen aufrufen ziemlich viel Speicher reservieren würde. Wie kann ich dies am besten realisieren? eventuell so: int array_size = 0; // global speichern { for (n=0; n<=0;n++) delete x[n]; array_size = ...; // größe wird aus einer Datenbank ermittelt int[array_size]* x; x[0] = new int; x[1] = new int; x[2] = new int; ... .. x[0] = ...; return; Gruß matzunami
Da das Array auf dem Stack liegt und dieser mit dem Verlassen der Funktion aufgelöst wird, kannst du den Speicher nicht mehr freigeben. Du könntest den Speicher aber als static deklarieren, damit er nicht auf dem Stack erzeugt wird. Dann kannst du diesen auch nachher freigeben. Aber du musst die Adressen auf Gültigkeit prüfen. Wenn du die Funktion nämlich das erste Mal aufrufst, sind ja noch keine gültigen Zeiger im Array.
Aus dem "new int" schliesse ich, das du C++ verwendest. Wäre es da nicht einfacher, gleich einen std::vector<int> (std::list, deque, ..., was halt am besten passt) zu verwenden?
matzunami schrieb: > int[array_size]* x; Das müßte eher so heißen:
1 | int* x[array_size]; |
> x[0] = new int; > x[1] = new int; > x[2] = new int; Warum willst du jeden int einzeln dynamisch erzeugen? Mach doch gleich ein Array aus int. > Wenn ich die Funktion verlasse möchte ich nicht das x zerstört wird. Warum nicht? Du kannst doch sowieso nicht drauf zugreifen. Kann es sein, daß du eigentlich was anderes tun willst, als du hier schreibst?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.