Распределение памяти MEMB в 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.


person rurilifree    schedule 15.03.2017    source источник


Ответы (1)


Одна проблема (не уверен, что это полностью решит вашу проблему...) заключается в том, что вы получаете доступ к указателю n->next в выражении for(n = list_head(recv_list); n != NULL; n = 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); 
}
person kfx    schedule 15.03.2017