У меня есть структура книги:Добавление записи структурировать в C
typedef struct {
int ID;
char* Title;
} Book;
Я просто хочу, чтобы добавить запись в таблицу Забронируйте. Это моя функция:
void AddRecord(Book**b, int *records_num){
*records_num = *records_num + 1;
Book* temp = (Book*)malloc(sizeof(Book) * records_num);
//FirstMethod
memcpy(temp, *b, records_num * sizeof(Book)); //Doesn't work
//SecondMethod
int j;
for(j = 0; j < records_num - 1; j++){
temp[j] = (*b)[j];
}
free(*b);
*b = temp;
//Some logic about adding a new record
}
Оба метода не работают после запуска. Вот как я называю эту функцию: AddRecord (books, & number_of_lines); Это не работает. Что здесь не так?
EDIT:
Я изменил некоторые вещи в коде. Он по-прежнему работает плохо, но не дает никаких ошибок.
void AddRecord(Book *b, int *records_num){
*records_num = *records_num + 1;
Book* temp = (Book *)malloc(sizeof(Book) * *records_num);
memcpy(temp, b, sizeof(b));
b = (Book *)realloc(b, sizeof(Book) * *records_num);
memcpy(b, temp, sizeof(temp));
b[*records_num - 1].ID = *records_num;
}
Зачем этот код является неправильным?
Где вы определили k и i? –
Определены ли 'i' и' k' глобально? Выделение глобального «k» в другом месте и освобождение его в этой функции несколько неустойчиво. Если 'i' и' k' не определены глобально, тогда код, который вы показываете, не будет компилироваться. Поскольку вы говорите, что запустили его, я предполагаю, что они глобальны. – lurker
'int * records_num) {' records_num - переменная указателя. 'malloc (sizeof (Book) * records_num);' здесь вы используете его, как если бы это был int. – wildplasser