usage of free in double linked lists?

gaiety's Avatar
Newbie Member
usage of free in double linked lists
can i free a pointer which i got through assignment of some other pointer
suppose p and q are pointers of same type then
after doing p=q;
is it necessary to use free(p) and free(q) or only one is enough

Thanks in advance
xpi0t0s's Avatar, Join Date: Aug 2004
You free the memory pointed to by the pointer, not the pointer itself. There is no magic connection between a pointer and the memory it points to, so
char *x=malloc(20);
char *y=x;
is perfectly valid (but watch out because x is no longer pointing to valid memory).

If you want to free the pointer itself then you need to make the variable of type pointer to pointer to thing, not just pointer to thing:
char **x=malloc(sizeof(char*));
char *y=*x;
free(*y); // frees the 20 bytes
free(y); // frees the pointer
You must not free the same memory twice
char *x=malloc(20);
char *y=x;
free(y); // OK, the 20 bytes are deallocated now
free(x); // likely to crash your program