こんにちは私は比較的新しくCで、誰かが次のコードで何をしているのかを説明できるかどうか疑問に思っていました。構造体のシンタックスの混乱
私は構造体持っている:私の質問は、まさに私がここでやっていると理由です
typedef struct free_list_header {
u_int32_t magic; // ought to contain MAGIC_FREE
vsize_t size; // # bytes in this block (including header)
vlink_t next; // memory[] index of next free block
vlink_t prev; // memory[] index of previous free block
} free_header_t;
と私は、以下のものを使用して、関数内でそれを初期化しています...
void vlad_init(u_int32_t size)
{
int sizePow2 = pow(2, ceil(log(size)/log(2)));
memory = malloc(sizePow2*sizeof(char));
memory_size = sizePow2;
strategy = BEST_FIT;
free_header_t *freeHeader = (free_header_t*)memory;
freeHeader->magic = MAGIC_FREE; // the unique value
freeHeader->size = memory_size; // amount we malloc'd
freeHeader->next = 0; // position of next free block
freeHeader->prev = 0; // position of prev free block
free_list_ptr = 0;
}
をそれは必要ですか?
free_header_t *freeHeader = (free_header_t*)memory;
だから私は "freeHeader"という名前を指して新しい構造体を宣言していますか?それは私が割り当てたメモリ内のポインタですか?これは、構造体をmallocされた領域に置いて、関数を初期化する関数からアクセスする方法です。
あなたが書いたコード、または課題やチュートリアルの一部としてあなたに与えたコードはありますか?それは変だと感じています。同様に、構造体のサイズの代わりにcharのサイズを使用してメモリを初期化するのはなぜですか? 'memory'を最初に初期化するのではなく、' freeHeader'を直接初期化して、後でキャストで代入するのはなぜですか? – AntonH
Hmmm ...用語が明確ではありませんが、それは問題の一部である可能性があります。 'sizePow2'とは何ですか?少なくともmemory_sizeと同じくらい大きい方が良いか、(おそらく)問題にぶつかるでしょう。あるいは、問題は 'memory_size'ですか?それとも両方の場合もあります。 –
だから、そのメモリアロケータと初期化関数は数字をとり、少なくとも2の最小の累乗をmallocに少なくともそれほど割り当てます。 memory_size == sizePow2、私は編集し、関数全体を追加します。 – qruton