C でメモリ アロケータを構築しようとしています。ユーザーは、使用するメモリの量と、使用できるメモリの最小ブロック サイズを指定することから始めます。
たとえば、ユーザーが最小のブロック サイズ 8B で 1024B を要求したとします。つまり、可能なブロック サイズは 1024、512、256、128、64、32、16、および 8 になります。
メモリの空きブロックを追跡するために、構造体へのポインターの配列があります。これらの構造体は Header と呼ばれ、配列は FreeList と呼ばれます。つまり、FreeList[0] には、メモリ サイズ 8 のブロックがあるメモリ内のスペースへのポインタが含まれます。FreeList[1] には、メモリ サイズ 16 のブロックがあるメモリ内のスペースへのポインタが含まれます。など
typedef void * Addr;
struct Header
{
Addr next;
int order;
};
struct Header *FreeList[];
次のコードで使用するために、この空きリストにメモリを割り当てようとしています。
FreeList = malloc(Order*sizeof(struct Header));
Order は、使用できるブロック サイズの数です。
コンパイル エラー 'FreeList' に不完全な型があります。
これらのポインターがどこかを指すようにしたくありません。データ用のスペースを割り当てたいだけです。