Können [] schädlich sein?
-
Hi,
int *b = new int; delete [] b;Es reicht ja ein
delete b;Kann das Probleme geben?
Wenns harmlos ist, kann man sich ne Abfrage auf n > 1 sparen:cout << "Wieviele?" << endl; int n = input(); int* a = new int[n]; // .. usage ... if ( n == 1 ) delete a; else delete [] a;
-
Speicher, der mit new int[n] angefordert wurde, muss immer mit delete[] freigegeben werden, auch wenn n 1 oder 0 ist.
Speicher, der mit new int angefordert wurde, muss immer mit delete freigegeben werden.
Wenn du es anders machst, kannst du dich auf nichts verlassen.
-
In deinem Beispiel musst du also immer
delete[]verwenden, somit fällt auch die Abfrage weg.Für komfortablere Nutzung seien allerdings noch die STL-Container erwähnt.
int main() { int n = input(); std::vector<int> a(n); // arbeite mit a wie mit dynamischem Array, z.B. a[2] = 324; // mit a.size() erhältst du die Anzahl Elemente, diese sollte n sein } // Speicher wird bei } automatisch freigegeben