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
    

Anmelden zum Antworten