给大家出道题玩玩!解决办法

给大家出道题玩玩!
下列程序运行时会崩溃,请找出错误并改正,并且说明原因。

#include   <stdio.h>
#include   <malloc.h>
typedef   struct   TNode
{
    TNode*   left;
    TNode*   right;
    int   value;
}TNode;

TNode*   root=NULL;
void   append(int   N);

int   main()
{
    append(63);
    append(45);
    append(32);
    append(77);
    append(96);
    append(21);
    append(17);   //   Again,   数字任意给出
    return   0;
}

void   append(int   N)
{
    TNode*   NewNode=(TNode   *)malloc(sizeof(TNode));
    NewNode-> value=N;
    if(root==NULL)
    {
        root=NewNode;
        return;
    }
    else
    {
        TNode*   temp;
        temp=root;
        while((N> =temp-> value   &&   temp-> left!=NULL)||(N <temp-> value   &&   temp-> right!=NULL))
        {
            while(N> =temp-> value   &&   temp-> left!=NULL)
                temp=temp-> left;
            while(N <temp-> value   &&   temp-> right!=NULL)
                temp=temp-> right;
        }
        if(N> =temp-> value)
            temp-> left=NewNode;
        else
            temp-> right=NewNode;
        return;  
    }
}


------解决方案--------------------
是不是因为malloc的内存空间没有释放?
在对树的操作中加入free操作,并在main结束前调用。