Pointer-Array richtig initialisieren?



  • Hallo,

    ich lege ein Array aus arrays an und würde gerne wissen ob ich zur richtigen Initialisierung wirklich komplett über das ganze Array laufen muss zuerst...so:
    Oder gibt es eine Alternative?

    int arr = new int*[size];
    for (i = 0; i < size; i++)
        arr[i] = NULL;
    

    danke



  • Was drin steht, ist undefiniert, irgendwas altes vom OS. Wenn du überall im Array wirklich 0en haben willst, musst du alles von Hand auf 0 setzten, sonst können irgendwelche Adressen in dem Array stehen.



  • Mati schrieb:

    int arr = new int*[size];
    

    Dieser Code ist so nicht korrekt. Entweder, du forderst ein dynamisches Array von int -Elementen an:

    int* arr = new int[size];
    

    Oder von Zeigern auf int (wozu auch immer...)

    int** arr = new int*[size];
    

    Ad aCTa schrieb:

    Wenn du überall im Array wirklich 0en haben willst, musst du alles von Hand auf 0 setzten, sonst können irgendwelche Adressen in dem Array stehen.

    Nicht wirklich von Hand.

    // Eine Möglichkeit
    int* arr = new int[size];
    std::fill(arr, arr+size, 0);
    delete[] arr;
    
    // Oder einfacher (geht nur beim Defaultwert)
    int* arr = new int[size]();
    delete[] arr;
    
    // Oder du verwendest gleich STL-Container, die sorgen auch für Freigabe
    // folgende Zeile ist äquivalent zu den jeweiligen Anweisungen oben
    std::vector<int> arr(size);
    


  • Soweit ich weiß, initialisiert calloc dein Array automatisch mit 0, ist aber halt C.



  • wxSkip schrieb:

    Soweit ich weiß, initialisiert calloc dein Array automatisch mit 0, ist aber halt C.

    Dass es C ist, macht es alleine noch nicht gefährlich, aber dafür die Tatsache, dass es nur mit POD-Objekten sinnvoll funktioniert. In C++ sollte man new/new[] und delete/delete[] oder gleich selbstverwaltende Klassen vorziehen, die wissen auch wie mit ihren Elementen umzugehen.


Anmelden zum Antworten