我正在尝试构建一个内存子分配器。我的代码有一些错误,它告诉我:
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 header
和 typedef
ed header
位于两个不同的 namespace 中。您转发声明的 struct header
但您从未定义它。
此外,以 _
开头的标识符通常保留用于内部,因此您不应该将它们用于您自己的东西。
关于C编程内存子分配器的循环列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020852/