C Программа вылетает после последнего скан/последнего цикла (игра с пустяками).C Сбой программы после последнего ввода
struct myQuiz*quizInput(int *nrQ)
{
int i, nrofrecords = 0;
struct myQuiz *Quiz = (struct myQuiz*)malloc(sizeof (struct myQuiz)**nrQ);
printf("How many Questions?\n");
scanf_s("%d", nrQ);
for (i = 0; i < *nrQ; i++) //for-loop för att skriva in påståenden
{
printf("Trivia input: ");
fflush(stdin);
fgets(Quiz[i].qQuest, 100, stdin);
nrofrecords = nrofrecords + 1;
fflush(stdin);
printf("Enter answer '1'(yes) or '0' (no): ");
scanf_s("%d", &Quiz[i].qAns);
fflush(stdin);
printf("Enter the difficulty (1-5)?: ");
scanf_s("%d", &Quiz[i].qDiff);
}
return Quiz;
}
удалить 'fflush (stdin)' это неопределенное поведение, что бы он сделал в любом случае? Вам нужно разместить больше кода, например, определение 'struct'. –
Выполнение 'struct myQuiz * Quiz = (struct myQuiz *) malloc (sizeof (struct myQuiz) ** nrQ);' after' scanf_s ("% d", nrQ); ' – chux
: эта строка: 'struct myQuiz * Quiz = (struct myQuiz *) malloc (sizeof (struct myQuiz) ** nrQ); ' 1) позволяет решить проблему, связанную с извлечением максимального размера токена. Предложить: 'struct myQuiz * Quiz = malloc (sizeof (struct myQuiz) * (* nrQ));' Обратите внимание на парсеры, чтобы отделить токен умножения от токена разыменования. 2) возвращаемое значение из malloc (и семейства) не должно быть отлито 3) возвращаемое значение всегда должно быть проверено, чтобы гарантировать, что распределение памяти было успешным. – user3629249