Contiki中的MEMB内存分配

MEMB memory allocation in Contiki

在Contiki中我声明了一个这样的链表:

MEMB(recv_memb, struct record, MAX_RECORD);
LIST(recv_list);

使用链表后,我像这样释放分配的内存:

for(n = list_head(recv_list); n != NULL; n = n->next)
{     
    list_remove(recv_list,n); 
    memb_free(&recv_memb,n); 
}

但是在到达 MAX_RECORD 节点后重新启动,我如何释放内存用于另外 30 条记录?

我正在 Contiki Cooja 模拟器中模拟网络场景,代码是 Contiki 编程和 C 的组合。

一个问题(不确定这是否会完全解决您的问题...)是您在元素已从列表中删除后访问语句 for(n = list_head(recv_list); n != NULL; n = n->next) 中的 n->next 指针,并且它已释放内存。

试试这个:

void *next;
for(n = list_head(recv_list); n != NULL; n = next)
{     
    next = n->next;
    list_remove(recv_list,n); 
    memb_free(&recv_memb,n); 
}