Я создаю функцию, которая должна удалить элемент в связанном списке. Моя проблема в том, что я могу удалить любой элемент, но не первый, почему?Как удалить первый элемент в моем списке?
Мой объектный файл:
typedef struct list {
char *key;
char *value;
struct list *next;
} List;
void db_init(List *list) {
list = malloc(sizeof(db_sizeOfStruct()));
list->next = NULL;
list->key = NULL;
list->value = NULL;
}
void db_delete(char *key, List *list) {
List *prev;
db_init(prev);
int first = 1;
while(list != NULL) {
if(strcmp(key, list->key) == 0) {
if(first == 1) {
list = list->next; // This is supposed to delete the first item in the list but it does not work...
} else {
prev->next = list->next;
}
return;
} else {
prev = list;
list = list->next;
first = 0;
}
}
}
И в главном файле для программы:
void delete(List *list) {
printf("key: ");
char *key;
key = malloc(sizeof(key)+1);
readline(key, 128, stdin);
if(key != NULL) {
db_delete(key, list);
}
}
int main(void) {
delete(list);
return 0;
}
Ваша функция db_init() является грубой. он должен вернуть список malloced (либо по возврату, либо по эталонному параметру) –
Кроме того, в 'delete' вы выделяете 5 байтов для' key' (4 байта для 'sizeof (key)' as 'key' является указателем ('char *') плюс 1. Думаю, вам нужно больше времени работать на C/C++, а затем начать работу над более сложными темами, например, связанными списками. – Isaac