Как разыменовать переменную 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 3

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;
 }