I am a beginner to C and have a question about the proper use of malloc/free for pointers, particularly in linked lists. I have implemented a method to add a new node to my linked list. The node "head" is a global variable. After creating a new node, I insert it at the front of my list and reassign head to point to it. Here is the code:
int add_entry(char* first_name, char* last_name, char* address, char* telephone)
{
struct node* new_node = (struct node*) malloc(sizeof(struct node));
strcpy(new_node->m_first_name, first_name);
strcpy(new_node->m_last_name, last_name);
strcpy(new_node->m_address, address);
strcpy(new_node->m_telephone, telephone);
if (num_nodes == 0)
head = new_node;
else {
new_node->m_next = head;
head = new_node;
}
num_nodes++;
return 1;
}
We were told in class that anytime we use malloc, we should also use free. However, in this case use of free for new_node at the end of the program leads to a segmentation fault. What is the proper way to free memory in this case? Thanks!