• RSS
  • Facebook
  • Twitter

Knowledge is Power.

  • Who you are ?

    Working on machines without understanding them ? Then you should be here..

  • Where you are ?

    Geographical location should not become a barrier to Share our knowledge.

  • What do you do ?

    Puzzles and Interview question are intended to be discussed here.

    Saturday, February 27, 2010

    Before looking at the answer, try writing a simple C program (with a for loop) to do this. Quite a few people get this wrong.


    This is the wrong way to do it


    struct list *listptr, *nextptr;
    for(listptr = head; listptr != NULL; listptr = listptr->next)
    {
    free(listptr);
    }


    If you are thinking why the above piece of code is wrong, note that once you free the listptr node, you cannot do something like listptr = listptr->next!. Since listptr is already freed, using it to get listptr->next is illegal and can cause unpredictable results!



    This is the right way to do it


    struct list *listptr, *nextptr;
    for(listptr = head; listptr != NULL; listptr = nextptr)
    {
    nextptr = listptr->next;
    free(listptr);
    }
    head = NULL;


    After doing this, make sure you also set the head pointer to NULL!

    0 comments:

    Post a Comment