gpt4 book ai didi

c - 如何使用container_of宏检索持有指针的结构

转载 作者:行者123 更新时间:2023-11-30 16:34:57 28 4
gpt4 key购买 nike

我使用的宏con​​tainer_of定义为:

#define container_of(ptr, type, member) ((type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member)))

结构 vector :

struct vector {
uint32_t signature;
size_t element_size;
size_t size;
void *data;
};

最后,函数vectorSize接收指向某些数据的指针。该函数不起作用,因为只有 struct vector v 中的 data 成员具有正确的值,其他成员都是垃圾,导致 if 语句 SIGNATURE 失败。

size_t vectorSize(void *vec)
{
void **pdata = &vec;
struct vector *v = container_of(pdata, struct vector, data);

if (v->signature != VECTOR_SIGNATURE) return 0;
return v->size;
}

我的设置有什么问题吗?

最佳答案

首先,请不要发布类似 1 的代码?这个:那个。我知道,这是您在深入研究问题时提供的实验代码。但它不应该发布在这里,因为它会让我们感到困惑。

如果我理解正确的话,你的函数接收一个指向结构成员的指针,并且你需要一个传递容器结构的宏。试试这个:

#define CONTAINER_OF(MemberPtr, StrucType, MemberName) ((StrucType*)( (char*)(MemberPtr) - offsetof(StrucType, MemberName)))

随后:

size_t vectorSize(void *vec)
{
struct vector *v = CONTAINER_OF(vec, struct vector, data);

if (v->signature != VECTOR_SIGNATURE) return 0;
return v->size;
}

关于c - 如何使用container_of宏检索持有指针的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49117645/

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