我有这段代码,这就是我缩小问题范围的地方。当我使用调试器时,它似乎很好,但一旦它离开函数,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));
[...]
}
您也可以在此处找到更多信息(以及其他选项)。