Я выполняю упражнение 17 «Изучить С» сложным способом, который требует построения базы данных и сохранения ее в ФАЙЛЕ. Я инициализировал базу данных, как и ожидалось, но когда я увеличил количество строк (особенно за порогом100) в базе данных он возвратил исключение: STATUS_ACCESS_VIOLATION при rip = 0010040132C.
Я использовал GDB для поиска ошибки, и вот результат.
Поток 1 "ex17"принят сигнал SIGSEGV, ошибка сегментации.0x000000010040132c в Database_create (conn = 0x600049490, max_data = 12,> max_rows = 200) в ex17_1.c: 87 87 (conn-> db-> lines + i sizeof (struct Address)) = addr;
Вот код, который я использовал.
struct Address{
int id;
int set;
char *name;
char *email;
};
struct Database{
int MAX_ROWS;
int MAX_DATA;
struct Address *rows;
};
struct Connection{
FILE *file;
struct Database *db;
};
void Database_create(struct Connection *conn,int max_data,int max_rows){
conn->db->MAX_DATA =max_data;
conn->db->MAX_ROWS = max_rows;
conn->db->rows =malloc(max_rows*sizeof(struct Address));
for(int i=0;i<max_rows;i++){
struct Address addr = {.id =i,.set = 0};
*(conn->db->rows +i*sizeof(struct Address)) =addr;
}
}
Я провел некоторое исследование и думаю, что STATUS_ACCESS_VIOLATION происходит, когда вы обращаетесь к части памяти, которую вы не должны.Но я еще не видел ошибку в своем коде.Может кто-нибудь проверить, в чем здесь причина?