我需要使用fisrt-fit模型重新创建一个内存管理器: 我们分配连续内存,然后我们需要分配精确的块。 我们知道在链表的帮助下哪个块是免费的。
问题是我需要将链表存储在我们的大连续内存中,每当我尝试在集群中间进行时,我都会得到一个段核心转储。
这是我的代码:
char mem_heap[HEAP_SIZE]; //allocated the big continuous memory block
//HEAP_SIZE = 1<<20
typedef struct fb1 { //The linked list structure
size_t size ;
struct fb *next ;
}fb ,*pfb;
pfb liste ; // a pointer to the linked list
void mem_init(){ // function which initialize the linked list
pfb newlist = (pfb) mem_heap ;
newlist->next = NULL ;
newlist->size = HEAP_SIZE ;
liste = newlist ;
}
//test of a function which try to free a block of memory located at the
// memory address zone and of size size.
void mem_free(void *zone, size_t size){
pfb tmp = (pfb) zone ;
tmp->size = size ;
tmp->next = liste ;
}
行tmp-> size会产生段核心转储错误。 我不知道为什么它在初始化时工作而不是在这里