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
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
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
Code:
char *x=malloc(20);
char *y=x;
free(y);
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:
Code:
char **x=malloc(sizeof(char*));
*x=malloc(20);
char *y=*x;
free(*y); // frees the 20 bytes
free(y); // frees the pointer
You must not free the same memory twice
Code:
char *x=malloc(20);
char *y=x;
free(y); // OK, the 20 bytes are deallocated now
free(x); // likely to crash your program