在函数中更改时,空指针值不变

问题描述 投票:0回答:1

因此,我正在尝试测试我的void *值是否正确,尽管我知道函数的确发生了变化,但它一直说它为NULL。TestCode:

  void test_mystack_push_and_pop(void)
 {
   void* obj;
   mystack_pop(1, &obj);
   TEST_ASSERT_EQUAL(12, (intptr_t)obj);
 }

Mystack_pop:

int mystack_pop(int handle, void* obj)
{
    pStackMeta_t tmpStackList = gStackList;
    obj = tmpStackList->stack->obj;
    tmpStackList->stack = tmpStackList->stack->next;
    tmpStackList->numelem -= 1;
    DBG_PRINTF("handle: %d, obj: %p\n", handle, obj);
    return 0;
}

因此,如果我在mystack_pop中检查obj的值,则它不为null,但在测试中,它仍为null。我已经尝试了全部,但无法正常工作。

c pointers void
1个回答
0
投票

如果要更新指针参数,则需要将其作为**ptr传递。通过编写**Ptr来声明您的输出参数Ptr是指针上的指针。因此,在类型为指针的变量上的指针。试试:

int mystack_pop(int handle, void **obj)
{
    pStackMeta_t tmpStackList = gStackList;
    *obj = tmpStackList->stack->obj;
    tmpStackList->stack = tmpStackList->stack->next;
    tmpStackList->numelem -= 1;
    DBG_PRINTF("handle: %d, obj: %p\n", handle, *obj);
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.