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);
}
在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);
}