0

我有一个 struct meta,我在 malloc 的开头插入其中一个:

void *ptr = malloc(sizeof(meta) + sz);
struct meta meta1;
meta1.size = sz;

//Which is better?
//memmove(ptr, &meta, sizeof(meta));
//ptr = meta;

稍后,我想访问我的元结构。我试过做:

*((struct meta*) (ptr - sizeof(m61_meta))).size;

其中,将地址移回 malloc 的“开始”,将指针转换为元指针,然后获取大小。但是,我有一个编译时错误,说它不是一个结构。

为什么我会收到此错误,如果您知道更好的方法,那就太好了。

编辑:我正在尝试将“元数据”放入我的指针中。所以基本上:

  memory 
[meta|data]
A    B

内存只是一个malloc。我保留数据 (B) 的指针,稍后,我尝试访问数据的“元”。那是,

(ptr - sizeof(m61_meta))

这是我的memory块的开始。我想从这里访问我的元数据。不幸的是,将我的A指针转换为struct meta指针失败。

4

1 回答 1

3

你得到编译器错误的原因是.运算符比运算符绑定得更紧密*,所以当你写

*((struct meta*) (ptr - sizeof(m61_meta))).size;

您正在尝试获取size指针的成员。你大概是说

(*((struct meta*) (ptr - sizeof(m61_meta)))).size;

在那之后,我不知道你的代码试图做什么,但我们将一次处理一个错误。这样做几乎可以肯定是一个错误ptr - sizeof(...,因为指针算术已经按所指向的大小进行缩放,所以你最终会跳过一大堆结构,而不仅仅是一个。其次,您已经为结构分配了空间,但没有将任何内容复制到其中。我敢肯定还有更多的问题。

于 2013-09-03T04:49:25.890 回答