c-如何在函数内部正确分配结构



我有这段代码,这就是我缩小问题范围的地方。当我使用调试器时,它似乎很好,但一旦它离开函数,freeCount就会丢失分配给它的值。它应该是100,直到最后一个},它显示它分配了很好的值,但一旦函数中断,它就会返回到某个16位的值。有人能指出我的错误吗??非常感谢!

   void initializeTree(TREE* empList)
   {
        empList = (TREE *)malloc(sizeof(TREE));
        int i;
        for (i = 1; i <= maxEmp; i++)
        {
            time_t seed = time(null);
            empList->freeList[i] = (int)(rand() % seed);
        }
        empList->freeCount = maxEmp;
        empList->parent = null;
        empList->root = null;
    }

这是因为在C中,函数的参数通过值传递给,这意味着它们被复制。因此,当您将指针传递给函数时,函数会收到指针的副本,并且正如您所知,更改副本不会更改原始副本。

C没有通过引用传递的参数,但可以使用指针来模拟它。因此,要通过引用传递指针,需要将指针传递给该指针。

void initializeTree(TREE** empList)
{
    *empList = malloc(sizeof(TREE));
    ...
    (*empList)->freeCount = maxEmp;
    ...
}

要调用此函数,您需要使用操作员&:的地址

TREE *empList;
initializeTree(&empList);

另一种选择是返回指针:

TREE* initializeTree(void)
{
    TREE* empList = malloc(sizeof(TREE));
    ...
    return empList;
}

您正在覆盖函数中empList的值,但它没有到达调用方。您实际需要做的是将指针传递给树的指针:

void initializeTree(TREE** empList)
{
    *empList = (TREE *)malloc(sizeof(TREE));
    [...]
}

您也可以在此处找到更多信息(以及其他选项)。

相关内容

  • 没有找到相关文章

最新更新