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は01つの問題(これがあなたの問題を完全に解決するかどうかわからない...)は、 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);
}