gpt4 book ai didi

c - 在 C 中用 void 指针修改原件

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:12 24 4
gpt4 key购买 nike

我正在尝试通过引用将变量传递给 void 指针以更新原始值。当我尝试时,旧值永远不会更新。任何帮助将不胜感激。gst_filter_chain 就像主函数(Gstreamer)

void update_value(void *oldValue, void *newValue)
{
oldValue = newValue;
}

void update_struct(myStruct *oldStruct, myStruct newStruct)
{
update_value((void *)&oldStruct->a, (void *)&newStruct.a)
}

static GstFlowReturn
gst_filter_chain (GstPad * pad, GstBuffer * buf)
{
GstFilter *filter= GST_FILTER (gst_pad_get_parent (pad));
myStruct temp_data;

int buf_size = GST_BUFFER_SIZE(buf);
if(buf_size > 1) //if buffer is not empty
{
if(!filter->is_init)
{
memcpy(&filter->data, GST_BUFFER_DATA(buf), sizeof(myStruct));
filter->is_init = TRUE;
}
else
{
memcpy(&temp_data, GST_BUFFER_DATA(buf), sizeof(myStruct));
update_struct(&filter->data, temp_data);
}
}


gst_buffer_unref(buf);
return GST_FLOW_OK;
}

最佳答案

void update_value(void *oldValue, void *newValue)
{
oldValue = newValue;
}

在此代码段中,您只更新指针变量,而不是它指向的值。您必须取消引用指针才能访问实际数据。如果您想要一个真正通用的 setter 解决方案,您可以使用 memcpy,但您需要向 update_value 传递一个大小参数,以告诉 memcpy oldValue 和 newValue 指向的数据类型的大小。

void update_value(void *oldValue, void *newValue, size_t dataSize)
{
memcpy(oldValue, newValue, dataSize);
}

关于c - 在 C 中用 void 指针修改原件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com