Dynamisches Array stürzt ab und an mal ab



  • Guten Tag allerseits,
    ich habe hier ein Stückchen Code geschrieben,
    und das Programm stürzt ab und an ab. Sprich: Nicht bei jedem Starten,
    aber gefühlt, bei jedem zweiten.

    typedef struct DynArray{
        int* array;
        int size;
        int capacity;
    }DynArray;
    
    void DynArray_add(DynArray* a, int value){
       if(a->capacity == a->size){
            int* tmp = a->array;
            a->array = (int*) malloc(a->capacity*2*sizeof(int));
            for(int i=0;i< (a->size) ;i++){ //Daten Kopieren
                a->array[i] = tmp[i];
            }
            a->capacity*=2;
            free(tmp); //Alten Speicher freigeben
       }
    
        a->array[a->size] = value;
        a->size          += 1;
    }
    

    Ich glaube nicht, dass ich irgendwo etwas überschreite. Das DynArray wurde initialisiert mit 'nem vollbepackten Array, size = 5 und capacity auch 5.

    Mit freundlichen Grüßen,

    Thez



  • malloc kann auch mal schief gehen.

    Wie sind die Startbedingungen?



  • Okay, tut mir Leid. Jetzt habe ich gerade gesehen, dass ich bei der Initialisierung des Arrays zu wenig allokiert habe.
    Naja, immerhin ist es jetzt aufgefallen. Damit scheint alles zu klappen.
    Hätte mal lieber gleich eine Initfunktion geschrieben. 🙄

    Trotzdem danke 😃

    Mit freundlichen Grüßen,
    Thez



  • Verwende realloc und du kannst dir dein manuelles Kopieren sparen.


Anmelden zum Antworten