Как разыменовать переменную void без приведения
typedef void *STACK_ENTRY;
STACK_ENTRY *create_stack_entry(void *value) {
STACK_ENTRY *entry = malloc(sizeof(*value));
*entry = *value;
return entry;
}
Я попытался сделать универсальную функцию, чтобы создать STACK_ENTRY
, которая должна иметь любой тип. Поэтому я использую указатель void в качестве параметра. Я выделяю память с размером типа значения, а затем я хотел бы дать значение объекту STACK_ENTRY
.
Но я получаю следующую ошибку:
prog.c:34:9: error: void value not ignored as it ought to be
*entry = *value;
^
Как я могу это исправить?
1 ответ:
Код должен справляться с размером. Передайте в размере при вызове
create_stack_entry()
. Гипс не нужен.// STACK_ENTRY *create_stack_entry(void *value) STACK_ENTRY *create_stack_entry(void *value, size_t size) { STACK_ENTRY *entry = malloc(size); if (entry) memcpy(entry, value, size); return entry; }