我有一个结构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)的指针,稍后,我尝试访问' meta'我的数据。也就是说,
(ptr - sizeof(m61_meta))
这是memory
阻止的开始。我想从这里访问我的元数据。不幸的是,将A
指针转换为struct meta
指针失败。
答案 0 :(得分:3)
您收到编译器错误的原因是.
运算符比*
运算符绑定得更紧,所以当您编写
*((struct meta*) (ptr - sizeof(m61_meta))).size;
您正在尝试使用指针的size
成员。你可能意味着
(*((struct meta*) (ptr - sizeof(m61_meta)))).size;
之后,我不知道你的代码试图做什么,但我们一次只会处理一个错误。执行ptr - sizeof(...
几乎肯定是错误的,因为指针算法已经按照所指向的大小进行缩放,因此您最终会跳过一大堆结构,而不仅仅是一个结构。其次,您已为结构分配了空间,但未将任何内容复制到其中。我确信还有更多问题。