从地址访问数据

时间:2013-09-03 04:36:18

标签: c

我有一个结构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指针失败。

1 个答案:

答案 0 :(得分:3)

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

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

您正在尝试使用指针的size成员。你可能意味着

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

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