Forum: PC-Programmierung wie Pointer löschen


von matzunami (Gast)


Lesenswert?

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

von Sebastian Hepp (Gast)


Lesenswert?

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.

von matzunami (Gast)


Lesenswert?

ok vielen dank

von Εrnst B. (ernst)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.