2014-02-13 27 views
0

所以我没有能力为我的生活做的事情是把这个新节点放入链表中,按顺序排列他们的startbyteendbytes。然后我需要它看看节点是否彼此相邻,如果是的话。让它们成为一个大节点。按照顺序将节点放在链表中

下面是一些代码我的工作是从第一个列表中释放内存,但在创建新节点后,我无法找到一种可行的方法,我尝试了多种不同的方法。

void release_memory(const int job) 
{ 
    ALLOCPTR t = alloclist; 
    FREEPTR f = freelist; 
    ALLOCPTR prev = alloclist; 

    while(t!=NULL) 
    {   
     if(t->id == job) 
     {    
      if(t==alloclist) 
       { 
        alloclist=alloclist->next; 
       } 
      else 
       { 
        prev->next = t->next; 
       } 

      FREEPTR newfreenode = new FREE_NODE; 
      newfreenode->start_byte = t->start_byte; 
      newfreenode->end_byte = t->end_byte; 
      newfreenode->size = t->size; 

      while(f->next!=NULL) 
      { 
       f=f->next;// 
      } 

      f->next = newfreenode; 

      checkIfFreeTogether();          
     } 

     prev=t; 
     t=t->next;   
} 

的,我需要做的事情的一个例子是这样的

before any memory freeing 
JOB  MEMORY 
1  1-49 
2  50-99 
3  100-199 

After freeing 2 and 3 
job  memory 
1   1-49 
FREE  50-99 
FREE  100-199 
After creating one big free node out of the two 

job  memory 
1  1-49 
FREE 50-199 
+0

你能举一个你想要达到的例子吗?我得到你正在试图对列表的节点和MSB,LSB或节点值的所有字节做些什么。但无法弄清楚什么... – Pandrei

+0

如果'freelist'是'NULL'会怎么样? –

回答

0

而不是仅仅把新节点在freelist结束,检查前面的节点end_byte相比,新的节点start_byte,如以及与下一节点start_byte相比新节点end_byte。通过这种方式,列表保持排序状态,并且可以轻松组合连续内存区域的节点。

相关问题