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
失敗します。