Am trying to build a memory suballocator. I've some errors with the code bellow, it tells me that:
free_list_ptr->next = &firstByte;
free_list_ptr->prev = &firstByte;
am getting gcc error warnings of 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;
}
This is most probably wrong:
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"
do instead
typedef struct header header; // forward declaration of both
struct header {
int signiture;
int size;
header* next;
header* prev;
};
In C struct header
and the typedef
ed header
live in two different name spaces. You forward declared struct header
but you never defined it.
Also, identifiers starting with _
are usually reserved for internals, so you shouldn't use them for your own stuff.