/ Contikiの/ MEMBメモリ割り当て - ネットワーキング、ダイナミックメモリ割り当て、contiki

Contikiの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の組み合わせです

回答:

回答№1は0

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