Dynamisches Array, alternativen zu malloc und realloc ...
-
Hallo zusammen!!
Wie kann ich denn ein Array dynamisch vergrößern, dass ich z.B. über new angelegt hab? (außer mit realloc?)
//Array anlegen int *arr = new int[10]; for(int i=0;i<10;i++) arr[i] = i; //Array vergrößern, alternativen?? arr = (int *) realloc(arr,sizeof(int*) * 20); for(int i=10;i<20;i++) arr[i] = i; for(int i=0;i<20;i++) cout << i << ":"<<arr[i] << endl;//Vergrößern?? ;( arr = new (arr) int[20];Eher nicht, es scheint als ob hier nicht zusätzlich speicher alloziert wird ...
Danke schon mal & Gruß
-
ohje, was du mit new anlegst, solltest du nicht mit realloc vergrößern!
new und malloc arbeiten völlig anders.
Um das Array zu vergrößern, solltest du ein neues array mit der neuen größe mit new anlegen, mit memset initialisieren und mit memcopy das alte rüber kopieren.
Dann das alte array mit delete[] (die [] sind wichtig) löschen.
In C++ würde ich aber std::vector nehmen, der kann das besser!
BTW gehört die Frage nicht in MFC Forum sondern wenn ins C++ Forum. Aber macht ja nix, wird sicher verschoben..
-
Ahja, dacht ich mir schon

Daher ja die frage

du meinst also so in die richtung:
int *arr = new int[10]; for(int i=0;i<10;i++) arr[i] = i; //arr = (int *) realloc(arr,sizeof(int*) * 20); int *tmp = arr; arr = new int[20]; memset(arr,0,sizeof(int*) * 10); memcpy(arr,tmp,sizeof(int*) * 10); //delete old arr delete[] tmp; for(int i=10;i<20;i++) arr[i] = i; for(int i=0;i<20;i++) cout << i << ":"<<arr[i] << endl;Oder?
Gruß
-
ja, so ähnlich

int* arr = new int[10]; for (int i = 0; i < 10; i++) arr[i] = i; int* tmp = new int[20]; memset(tmp, 0, sizeof(tmp[0])*20); memcpy(tmp, arr, sizeof(arr[0])*10); delete[] arr; arr = tmp; for (int i = 10; i < 20; i++) arr[i] = i; for (int i = 0; i < 20; i++) std::cout << arr[i]; delete[] arr;aber wie gesagt, sehr Fehleranfällig das ganze...
Grüße