In:
value_t *newValue = malloc(sizeof(value_t));
Вы выделяете память для объекта. Как видно, node
содержит указатель на объект значения. С
newValue = node->value;
вы копируете указатель. Чтобы скопировать значение, используйте:
*newValue = *node->value;
Теперь вы можете поместить объект в ваш новый узел:
newSymbol->value = newValue;
Примечание: не забудьте установить newSymbol->value= NULL;
, когда node->value==NULL