Arrays und Pointer -- Allokation von Arrays -- Pointerarithmetik

Allokation von Arrays

Um auf unser Primzahlproblem zurückzukommen: Was zur Compilierzeit bekann ist, ist daß wir eine Anzahl von Primzahlen berechnen wollen, wie viele das sein werden ist aber unbekannt. Eine Lösung ist dem Compiler mitzuteilen, daß wir einen Pointer auf integer haben wollen und dann zur Laufzeit so viele Objekte erzeugen, wie wir benötigen. Auch das geht mit dem new-Operator.

void primzahl(int m)
{
  int* prim;          // Pointer auf integer
  prim = new int[m];  // m ints alloziieren
  // Berechnung der Primzahlen
  ...
  // Ausgabe
  for (int i = 0; i < m; i++)
    cout << *(prim+i);
  delete[] m;
}

Der delete-Operator hat für Array-Konstrukte die Form mit den eckigen Klammern. Auch hierauf ist zu achten. Andernfalls würde nur das erste Objekt gelöscht und alle anderen Objekte wären noch im Speicher und würden unnötig Speicherplatz verbrauchen; es könnte aber nicht mehr auf sie zugegriffen werden.