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;
}