C不同类型的连续分配

时间:2016-11-22 11:41:58

标签: c memory allocation

我需要使用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会产生段核心转储错误。 我不知道为什么它在初始化时工作而不是在这里

0 个答案:

没有答案