Problem mit memcpy
-
Hallo, ich habe ein Problem mit der Funktion memcpy. In meinem Programm habe ich 2 Arrays. Das erste Array ist kleiner als das Zweite (hat also weniger Elemente). Daher möchte ich beide Arrays gleich lang machen.
In Folgendem Beispiel ist Array1: 1 2 3 4 5 6 7 . Nach dem "gleichlang machen" mit Array2 soll Array1 so aussehen: 0 0 0 1 2 3 4 5 6 7 .
Mein Programm:size_t laenge=7; // Länge von Array1 size_t laenge_arr2=10; // Länge von Array2 short *arr1 = new short [laenge]; // Array1 erstellen for(unsigned int t(0);t!=laenge;++t) // Array1 mit Werten füllen arr1[t]=t+1; // Array1: 1 2 3 4 5 6 7 short *pointer = new short[laenge]; // Ein Array erstellen, dass so lang ist wie Array1 memcpy(pointer,arr1,laenge); // Array1 in das neu Erstellte kopieren //HIER IST DER FEHLER //die Werte in pointer lauten: 1 2 3 4 17999 20575 20306 //--------- Folgender Code eher unwichtig ------------ delete [] arr1; // Array1 löschen size_t a(laenge_arr2-laenge); // Die Stelle merken, bis zu der vorne mit Nullen aufgefüllt wird laenge=laenge_arr2; // Länge von Array1 vergrößern zur Länge von Array2 arr1=new short[laenge]; // Array1 jetzt mit so vielen Elementen erstellen, wie Array2 hat for(size_t t(0);t!=a;++t) // Die ersten paar Stellen mit Nullen auffüllen arr1[t]=0; memcpy(arr1+a,pointer,laenge-a); // Ab der Stelle, wo keine nullen mehr aufgefüllt werden //das Hilfsarray zurück in Array1 kopieren //Wert von Array1 jetzt: 0 0 0 1 2 3 4 24912 26740 17213 delete [] pointer; //Hilfsarray löschenDie falschen Werte im Array sehen schwer nach Werten aus, die zufällig im Arbeitsspeicher rumschwirren. Allerdings sehe ich nicht die Stelle, wo ich die bereiche meiner Arrays überschreite

Kann mir jemand helfen?P.S.: Ja, ich will das ganze wirklich mit arrays lösen, also bitte nicht "Nimm doch vector" schreien

-
memcpy(pointer,arr1,laenge);
Ich denke hier ist der Fehler... die Größe ist möglicherweise Falsch! Versuche mal statt
memcpy(pointer,arr1,laenge);
jetzt
memcpy(pointer,arr1,sizeof(short[laenge]));
-
Ja, mit sizeof(short[laenge]) gehts einwandfrei. Danke!