Do you really need to allocate memory here in this line ?
struct bst *temp=malloc(sizeof(struct bst));

there is memory leak here.
temp=node

And the problem statement is when you free(temp). Since temp is still
pointing to the tree parent node where you insert last value.

On Fri, Sep 4, 2015, 9:47 AM Puneet Gautam <[email protected]> wrote:

> HI, I am running the following peice of code on Dev-cpp compiler
>
> #include<stdio.h>
> #include<stdlib.h>
> #include<stddef.h>
> struct bst
> {
>        int info;
>        struct bst *leftnode;
>        struct bst *rightnode;
> };
> void insert(struct bst *node,int val1)
> {
>      struct bst *newnode=malloc(sizeof(struct bst));
>      struct bst *temp=malloc(sizeof(struct bst));
>      newnode->info=val1;
>      temp=node;
>      while(temp)
>      {        printf("\n Inside while loop");
>     *          if(val1<=temp->info)*
>                       if(temp->leftnode!=NULL)
>                       {                    temp=temp->leftnode;
>                                            printf("\n IN if of left");
>                                            }
>                       else
>                                           break;
>               else
>                       if((temp->rightnode)!=NULL)
>                       {                   temp=temp->rightnode;
>                                            printf("\n IN if of right");
>                                            }
>                       else
>                                           break;
>      }
>      if(!temp)
>      {        free(temp);
>               return;
>      }
>       else if(val1<=temp->info)
>       {                temp->leftnode=newnode;
>                        printf("\n Inserted to the left");
>                       }
>       else
>        {               temp->rightnode=newnode;
>                         printf("\n Inserted to the right");
>        }
>       newnode->leftnode=NULL;
>       newnode->rightnode=NULL;
>       free(temp);
> }
> int main()
> {
>     struct bst *start=malloc(sizeof(struct bst));
>    // struct bst *newnode=malloc(sizeof(struct bst));
>     start->info=10;
>     start->leftnode=NULL;
>     start->rightnode=NULL;
>     printf("Data is :%d",start->info);
>     getchar();
>     insert(start,20);
>   * insert(start,5);*
>     getchar();
>     free(start);
>     return 0;
>     }
>
> The compiler reports *Access violation* at the highlighted lines i.e.
> *insert(start,5);*
> But at the run of insert(start,20); , there is no problem as such.
> Please help !!
>
> Regards
> Puneet
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].

Reply via email to