-1

メモリ サブアロケータを作成して初期化しようとしていますが、ポインタの処理が間違っていると思います。このサブアロケータは、メモリのブロックを malloc し、サイズを示すためにフロント バイトに配置された 32 バイトの「ヘッダー」で分割します。

ヘッダーは、循環二重リンクリストであると想定されています。したがって、最初の初期化では、構造体の next 値と prev 値はそれ自体を指します。

何時間もこれに取り組もうとしていて、疲れていて、今はポインターにかなりイライラしています..

typedef unsigned char byte;
static byte *memory = NULL;

struct header;

typedef struct _header {
    int size;
    struct header * next;
    struct header * prev;
}header;

static header* free_list_ptr;


void allocator_init(u_int32_t size){

    memory = (byte*) malloc(size);

    //initialize free_list_ptr;
    free_list_ptr = (header*) memory;

    free_list_ptr->size = size;
    free_list_ptr->prev = free_list_ptr; //error: assignment from incompatible pointer type
    free_list_ptr->next = free_list_ptr; //error: assignment from incompatible pointer type
}
4

2 に答える 2

0

free_list_ptraddress-of演算子(&)を使用してアドレスを割り当てる必要があります。

free_list_ptr.prev = &free_list_ptr;

[メンバー参照構文を修正するために編集されました。]

于 2012-08-18T17:25:28.657 に答える
0

あなたの宣言free_list_ptrはポインタではありません。タイプがありheaderます。私はあなたが欲しいと思います

static header *free_list_ptr; 
于 2012-08-18T17:19:07.910 に答える