-5
insert(char * key, struct node *leaf, int x)
{
    if (x==1) //Customer
    {
        if( strcmp(leaf->customer.IDNo,root->customer.IDNo)==0 )
        {
            *leaf = (struct node) malloc(101);
            *leaf->customer.IDNo = key;
            /* initialize the children to null */
            (*leaf)->left = 0;
            (*leaf)->right = 0;
        }

        else if(strcmp(key,(*leaf)->customer.IDNo)<0)
        {
            insert( key, &(*leaf)->left );
        }

        else if(strcmp(key,(*leaf)->customer.IDNo)>0)
        {
            insert( key, &(*leaf)->right );
        }
    }

    else //Product
    {
        if( strcmp(leaf->product.ProdName,root->product.ProdName)==0 )
        {
            *leaf = (struct node) malloc(101);
            (*leaf)->product.ProdName = key;
            /* initialize the children to null */
            (*leaf)->left = 0;
            (*leaf)->right = 0;
        }

        else if(strcmp(key,(*leaf)->product.ProdName)<0)
        {
            insert( key, &(*leaf)->left );
        }

        else if(strcmp(key,(*leaf)->product.ProdName)>0)
        {
            insert( key, &(*leaf)->right );
        }
    }
}

45,64 转换为非标量类型请求 46 赋值从没有强制转换的指针生成整数 48,49,51,53,55,57,65,67,68,70,72,74,76 无效类型参数 - >(有结构节点)53、57、72、76 函数“插入”的参数太少

Node *search(char * key, struct node *leaf,int x)
{
    struct node * y;

    if (x==1)
    {
        if( leaf != 0 )
        {
            if(strcmp(key,leaf->customer.IDNo)==0)
            {
                y= leaf;
            }

            else if(strcmp(key,leaf->customer.IDNo)<0)
            {
                y= search(key, leaf->left);
            }

            else
            {
                y= search(key, leaf->right);
            }
        }
    }

    else if (x==2)
    {

        if( leaf != 0 )
        {
            if(strcmp(key,leaf->product.ProdName)==0)
            {
                y= leaf;
            }

            else if(strcmp(key,leaf->product.ProdName)<0)
            {
                y= search(key, leaf->left);
            }

            else
            {
                y= search(key, leaf->right);
            }
        }
    }

    else y= 0;
    return y;
}

94,98,112 函数“搜索”的参数太少

多行发生的错误是相似的,所以我需要的只是有关如何修复其中一个错误的说明,其余的我可以完成。

4

1 回答 1

4

您在混淆指针和它们指向的内容时遇到了许多问题。

例如,在这段代码中:

*leaf = (struct node) malloc(101);

你有几个严重的问题:

  1. malloc 返回一个指向内存的指针,而不是一个具体的结构。因此,尝试将其返回的指针转换为结构节点将不起作用。您应该将其转换为 struct node*(指向节点的指针)而不是具体节点。
  2. 叶是指向节点的指针。如果您尝试取消引用并将其设置为等于另一侧的节点,您将尝试写入节点指向的内存,而不是更改指针指向的位置。您可能想做其他事情(如下所述)。
  3. 将 101 之类的任意数字传入 malloc 是极其不安全和浪费的。相反,您应该要求 malloc 通过传入 sizeof(struct node) 为您提供适量的空间。

不过,更重要的是,您试图更改插入函数内部的叶指针,但按值传递叶指针的问题。为了更改叶指针指向的节点,您应该传入一个指向叶指针的指针,而不是叶指针本身。尝试将签名更改为使用 a struct node** leaf,然后更新您的代码,以便在代码中重新分配叶子指向的指针。

这里还有许多其他指针错误,但最终我认为它们都源于混淆指针及其指向的内容。在修复代码时,请尽量记住是否要更改指针指向的对象,或者首先指向哪个对象。

希望这可以帮助!

于 2013-01-06T17:33:28.170 回答