开发者

NULL Pointer Problem?

void Insert(AVLnode * & root, string X)
{
    if ( root == NULL)
    {
        root = GetNode(X);
    }
    else if ( root->info > X )
    {
        Insert(root->left,X);
        if ( height(root->left) - height(root->right) == 2 )
            if ( X < root->left->info )
                RotateRR(root);
            else
                RotateLR(root);
    }
    else if ( root->info < X )
    {
        Insert(root->right,X);
        if ( height(root->right) - height(root->left) == 2 )
            if ( X > root->right->info )
                RotateRR(root);
            else
                RotateLR(root);
    }
    root->height = max( height(root->left), he开发者_Go百科ight(root->right) )+1;
}
AVLnode* find(AVLnode* root,string X)
{
    if (!root) return 0;
    if ( root->info == X )
        return root;
    else if (root->info < X)
        find(root->left,X);
    else if (root->info > X)
        find(root->right,X);
    return 0;   
}
int main(int argc,char* argv)
{
    AVLnode* Dic;
    Insert(Dic,"adf");
    return 0;
}

The first time in Insert, root is NULL but when I debug, it skips root == null. What's going on?


The problem is in the AVLnode* Dic; statement of main(). You are sending an uninitialized pointer to insert() from main(). It contains garbage values. Initialize it to NULL


The first time it's not NULL. Variables do not auto-initialize to NULL or 0 in C++; they contain garbage (whatever the memory address they occupy contained before).

Replace AVLnode* Dic; with AVLnode* Dic = NULL; and try again.


"The first time in Insert", in the code you give, root is a "random"-ish value, because you never initialize Dic -- so it may well happen to be NULL when you're running without a debugger and otherwise if you are using a debugger. That's just a definite bug in your code, so add = 0 before the ; in the first line of main's body. After which, you may find more bugs (hard to say, since you don't show us GetNode or the Rotate thingies, even though you do show us the find function that's never ever called -- peculiar choice of code to show us, indeed).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜