Я вызываю две эти функции: сначала добавляю данные в файл, затем считываю в массив структур и вывожу. Первая функция работает, а при вызове второй функции - "срабатывание точки останова" при присвоении переменной fp указателя на поток - при вызове функции fopen(). Помогите разобраться с проблемой не понимаю, где ошибка. Может быть это из-за глобальных переменных? Функция number_input просто присваивает значение по указателю.
#include <stdio.h>
FILE* fp;
struct member* arr;
int arr_len = 0;
void add_data() {
fp = fopen("database.bin", "wb");
arr_len++;
arr = realloc(arr, sizeof(struct member*) * arr_len);
printf(" Input information about new member:");
do {
printf("\nFull name - ");
getchar();
gets(arr[arr_len - 1].full_name);
} while (!contain_latin_letters(arr[arr_len - 1].full_name, strlen(arr[arr_len - 1].full_name)));
do {
printf("Club - ");
gets(arr[arr_len - 1].club);
} while (!contain_latin_letters(arr[arr_len - 1].club, strlen(arr[arr_len - 1].club)));
do {
printf("Role (goalkeeper, defender, midfielder, striker) - ");
gets(arr[arr_len - 1].role);
} while (!(!strcmp(arr[arr_len - 1].role, "goalkeeper") || !strcmp(arr[arr_len - 1].role, "defender") || !strcmp(arr[arr_len - 1].role, "midfielder") || !strcmp(arr[arr_len - 1].role, "striker")));
number_input("Age of member - ", &arr[arr_len - 1].age);
number_input("Number of matches played for team - ", &arr[arr_len - 1].matches);
number_input("Number of scored goals - ", &arr[arr_len - 1].goals_scored);
char* c = (char*)arr; // устанавливаем указатель на начало структуры
// посимвольно записываем в файл структуру
for (int i = 0; i < sizeof(struct member) * arr_len; i++)
{
putc(*c++, fp);
}
fclose(fp);
}
void output_database() {
fp = fopen("database.bin", "rb");
char* c = (char*)arr;
// считываем посимвольно из файла
int i;
while ((i = getc(fp)) != EOF)
{
*c = i;
c++;
}
for (i = 0; i < arr_len; i++)
printf("%s %s %s %d %d %d\n", arr[i].full_name, arr[i].club, arr[i].role, arr[i].age, arr[i].matches, arr[i].goals_scored);
fclose(fp);
}