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öschen
    

    Die 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!


Anmelden zum Antworten