You create a new node_pointer each time. That's OK.
But:
- char buf[] = "dsdsdsdsdsds\0";
-
structures->common_fields = buf;
-
every one of your node_pointer gets the same address. namely, the address of buf. So each node copies to the same address.
Unfortunately, when the function completes, buf is deleted (it's a local variable) and now all of your nodes are skrogged.
Never use the address of a local variable in such a way that the address exists after the function completes and the variable it points at is gone.