makeNode
is writing to the (undefined) address pointed to by an uninitialised pointer. You don't own the memory this points to so attempting to write to it results in undefined behaviour; a crash is a valid (and often useful) example of undefined behaviour.
You need to allocate memory here
Node* makeNode(int _value ) {
Node *node = malloc(sizeof(*node));
if (node == NULL) {
return NULL;
}
...
Make sure to return this memory to the system - by calling free(node)
- when you remove a node from your list.