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


Anmelden zum Antworten