1 c malloc function pass-by-value
我有这段代码,这是我缩小问题范围的地方。当我使用调试器单步执行时,似乎没问题,但一旦它离开函数, 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;
}
Run Code Online (Sandbox Code Playgroud)
这是因为在 C 中,函数的参数是按值传递的,这意味着它们是被复制的。因此,当您将指针传递给函数时,函数会收到指针的副本,并且如您所知,更改副本不会更改原始指针。
C 没有通过引用传递参数,但可以使用指针来模拟。因此,要通过引用传递指针,您需要传递一个指向该指针的指针。
void initializeTree(TREE** empList)
{
*empList = malloc(sizeof(TREE));
...
(*empList)->freeCount = maxEmp;
...
}
Run Code Online (Sandbox Code Playgroud)
要调用此函数,您需要使用地址运算符&
:
TREE *empList;
initializeTree(&empList);
Run Code Online (Sandbox Code Playgroud)
另一种选择是返回指针:
TREE* initializeTree(void)
{
TREE* empList = malloc(sizeof(TREE));
...
return empList;
}
Run Code Online (Sandbox Code Playgroud)