C编程内存子分配器的循环列表

标签 c memory-management linked-list circular-list

我正在尝试构建一个内存子分配器。我的代码有一些错误,它告诉我:

free_list_ptr->next = &firstByte;
free_list_ptr->prev = &firstByte;

我收到 gcc 错误警告 warning: assignment from incompatible pointer type

//primitive variable of byte as char, always positive.
typedef unsigned char byte;
static byte *memory = NULL;

struct header;

typedef struct _header {
    int signiture;
    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;

        header* firstByte = (header*) memory;

    free_list_ptr->size = size;

    //error here: warning: assignment from incompatible pointer type
    free_list_ptr->prev = &firstByte;
    free_list_ptr->next = &firstByte;
}

最佳答案

这很可能是错误的:

struct header;               // forward declare "struct header"

typedef struct _header {
    int signiture;
    int size;
    struct header* next;     // refer to the forward declared "struct header"
    struct header* prev;
} header;                    // declare type-alias "header"

改为做

typedef struct header header; // forward declaration of both

struct header {
    int signiture;
    int size;
    header* next;
    header* prev;
};

在 C 中,struct headertypedefed header 位于两个不同的 namespace 中。您转发声明的 struct header 但您从未定义它。

此外,以 _ 开头的标识符通常保留用于内部,因此您不应该将它们用于您自己的东西。

关于C编程内存子分配器的循环列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020852/

相关文章:

c - 在 if 语句中使用数组旁边的感叹号意味着什么? "if (!used[i])"

c++ - 使用新的外部函数范围声明和初始化变量

java - 将大对象引用而不是小对象传递给方法在处理或内存消耗方面有什么不同吗?

c++ - 使用重载放置新/删除提升 shared_ptr

c++ - C++中的链接列表错误

c - 隐式函数声明

矩阵的 c 函数 free()

c - gcc 不会正确包含 math.h

c - 二叉搜索树到链接列表的转换只转换了一半的条目

c - 在c中添加到链表的末尾