0

struct がありmeta、そのうちの 1 つを 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

メモリはただ 1 つの malloc です。データ (B) のポインターを保持し、後でデータの「メタ」にアクセスしようとします。あれは、

(ptr - sizeof(m61_meta))

これが私のmemoryブロックの始まりです。ここからメタにアクセスしたい。残念ながら、Aポインターをポインターにキャストするとstruct meta失敗します。

4

1 に答える 1