Привет, у меня есть проблема, потому что я не понимаю, почему моя программа C имеет ошибку сегментации. Моя программа создает 2-мерный массив int, и каждая строка будет разделяться фиксированным размером 5, а случайные числа - в каждой строке. Но пользователь может выбрать, хочет ли он поставить более 5 строк в одну строку, если он захочет перевести мою линию. Длина каждой строки сохраняется в размере массива. Таким образом, выход прекрасен: для примера 1,6,3,4 8,6,5,3,2,1,6,8,9 1,4 8,9,6,4,2segmentation fault by realloc 2 dim array, но правый выход?
Но после выхода моя программа заканчивается ошибкой сегментации, но почему? это моя ошибка где-то в свободной функции или в моем выпуске? Спасибо за любой ответ и SRY за мой плохой английский :)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void flushi(){// to flush the buffer
char buff = ' ';
while ((buff = getchar()) != '\n' &&buff !=EOF);
return;
}
void freeall(int **arr,int zeilen){
for (int i = 0; i < zeilen; i++) {
free(arr[i]);
}
free(arr);
}
int main(){
int zeilen=4;
int d,j;
srand(time(0));
int spalten=5;
int size[spalten];
int **arr=malloc(sizeof(int*)*4);
for(int i=0;i<zeilen;i++){
arr[i]=(int*)malloc(sizeof(int*)*spalten);// malloc first line
j=0;
while(1){
printf("Wollen sie noch eine Zahl eingeben\n");
printf("1...Ja 0...Nein\n");
scanf("%i",&d);
flushi();
if(d==1){
if(j>=spalten){// if user want more than 5 int in one line
spalten++;
arr[i]=realloc(arr[i],sizeof(int)*spalten);// realloc line
}
arr[i][j]= (rand()%10)+1;
j++;
printf("Sie haben schon %i Zahlen eingegeben\n",j);
}
else{
break;
}
}
size[i]=j;
}
printf("Your Numbers\n");
for (int h=0;h<spalten;h++){
printf("\n");
for (int g=0;g<size[h];g++){
printf("%i ",arr[h][g]);
}
}
printf("\n");
freeall(arr,zeilen);
return EXIT_SUCCESS;
}
Е ("Wollen Sie Noch Zahl сделайте Введите Ваше \ п «); Is printf («Вы хотите добавить число \ n») – rem
printf («Sie haben schon% i Zahlen eingegeben \ n», j); Его информация о том, сколько номеров вы положили в одну строку – rem
логически, 'arr [i] = (int *) malloc (sizeof (int *) * spalten);' должно быть 'arr [i] = malloc (sizeof (int) * spalten); ' –