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[]unddelete/delete[]oder gleich selbstverwaltende Klassen vorziehen, die wissen auch wie mit ihren Elementen umzugehen.