-1

我正在尝试制作一个内存子分配器并对其进行初始化,我认为我错误地处理了指针。该子分配器分配一块内存,然后将其与放置在前面字节中的 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_ptr使用 address-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 回答