【问题标题】:Void pointer value doesn't change when changed in function无效指针值在功能更改时不会更改
【发布时间】:2020-06-07 14:15:38
【问题描述】:

所以,我正在尝试测试我的 void* 值是否正确,但它一直说它是 NULL,尽管我知道它确实在我的函数中发生了变化。 测试代码:

  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 的值,它不为空,但在测试中它仍然为空。我已经尝试了所有方法,但无法使其正常工作。

【问题讨论】:

  • 您在obj = tmpStackList->stack->obj; 行中设置了obj,因此开始查找的明显位置是设置tmpStackList->stack->obj 的代码,但您没有包含该代码。

标签: c pointers void


【解决方案1】:

如果要更新指针参数,需要将其作为**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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2020-03-12
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多