Mein Programm zeigt mir "Segmentation fault (Speicherabzug geschrieben)" an :/ -- C

Hey Leute, ich schreibe zu Übungszwecken ein kleines Programm in C. Es geht darum, dass ich einen dynamischen int Array erstelle. Also am Anfang eine Eingabe habe, die die Größe des Arrays angeben soll und dannach die Zahlen selbst. Das Funktioniert auch ohne Probleme. Aber sobald ich diesen Array erweitern will, gibt er mir die Fehlermeldung „Segmentation fault (Speicherabzug geschrieben)“ an. Weiß einfach nicht wodran es liegt, hab einige Sachen ausprobiert (den Ursprungsarray testweise einfach im Speicher zu lassen und einen neuen zu allokieren etc.) aber es will nicht funktionieren. Könnte mir dabei jemand helfen? Vielen Dank schonmal!

Hier wäre der Code, der Fehler tritt in der Funktion „dyn_array_add“ auf.

#include<stdio.h>
#include<stdlib.h>

int* DynArray(int* array, int *anzahl){
    
    array=malloc((*anzahl)*sizeof(int));
    int i;
    
    for(i=0;i<*anzahl;i++){
        if(i==0){
            printf("Geben sie eine Zahl ein: ");
        }
        else {
            
            printf("Jetzt die nächste: ");
        }
        scanf("%i", &array[i]);
        
        printf("\n");
        }
        
        return array;
    }
    


int* dyn_array_add(int* array, int *anzahl){
        int zusatz;
        int x=1;
        int i;
        int temp=*anzahl;
        int* temparray=malloc(temp*sizeof(int));
        
        
        for(i=0;i<temp;temp++){
            temparray[temp]=array[temp];
        }
        
        
        printf("\nWieviele Zahlen wollen sie hinzufügen?\n");
        scanf("%i", &zusatz);
        if(zusatz!=0){
            while (zusatz<0){
                printf("\nDie Zahl sollte positiv sein.");
                scanf("%i", &zusatz);
            }
        
        
            
            
            free(array);
            
                
            while(x*(*anzahl)<=(zusatz+(*anzahl))){
                *anzahl=x*(*anzahl);
                x++;
            }
            
            array=malloc((*anzahl)*sizeof(int));
            
            for(i=0;i<temp;temp++){
                array[temp]=temparray[temp];
            }
            
            printf("\nAbbruchcode '404'\n");
            while(temp<*anzahl || array[temp-1]!=404){
                
                    printf("\nGeben sie die zusätzliche Zahl ein: ");
                
                scanf("%i", &array[temp]);
        
                
                temp++;
            }
            *anzahl=temp-1;
            if(array[temp-1]==404){
                
                *anzahl-=1;
            }
            free(temparray);
            return array;
        }
        
        else{
            free(temparray);
            return array;
        }
        
        free(temparray);
        return array;
    }


int main() {
   
    int hilf;
    int *anzahl=malloc(sizeof(int));
    int *array;

    printf("Dynamischer Array\n\nWelche Größe soll ihr Array haben?\n");
    scanf("%i", &hilf);
    
    
    while (hilf<0){
        printf("\nDie Zahl sollte positiv sein.");
        scanf("%i", &hilf);
    
    }
    *anzahl=hilf;
    printf("\n");
    
    
    
    array=DynArray(array, anzahl);
    
    int i;
    
    for(i=0;i<(*anzahl);i++){
        printf("%i", array[i]);
        printf("\n");
    }

    array=dyn_array_add(array, anzahl);
    
    for(i=0;i<(*anzahl);i++){
        printf("%i", array[i]);
        printf("\n");
    }

    
    return 0;
}

Natürlich tritt der Fehler in dyn_array_add auf, genau gesagt in Zeile 36. Die Ursache ist aber in der Zeile darüber zu finden …

Kommt dir denn an deinen Zeilen

   for(i=0;i<temp;temp++){
          temparray[temp]=array[temp];
   }

gar nichts verdächtig vor?

Gruß
HH

huch wie blöd. ist gefixt, aber das problem besteht weiterhin :no_mouth:

 for(i=0;i<temp;i++){
        temparray[i]=array[i];
 }

hab die weiteren fehler nun gefunden. danke für den denkanstoß, dass ich das nicht gesehen habe :thumbsup:

lg
Futhishi