Вам нужно изменить его на:
void initEntry(struct entry **entry) {
*entry = malloc(sizeof(struct entry));
(*entry)->value = 0;
}
int main() {
struct entry *list;
initEntry(&list);
list->value = 5;
}
В вашем коде вы просто теряете адрес выделенной памяти после возврата из вызова initEntry()
. Это потому, что аргумент entry
является локальной переменной, относящейся к функции initEntry()
, и присвоение ей любых значений невидимо извне. Вам нужен дополнительный уровень извлечения, чтобы иметь возможность вернуть адрес выделенной памяти.