だから、私は47000のうなずきを持つリンクリストを持っています。各ノードには年月日があります。 [最初の月、最後の月]に収まらないノードを削除したい。たとえば、最初の月を3、最後の月を8として選択した場合、年と日が合わないものは削除します。
LISTAPAISES *Filtra_month(LISTAPAISES * head, int month_init, int month_final) {
LISTAPAISES *aux=NULL, *elim=NULL, *aux2=NULL;
aux=head;
while(aux !=NULL){
if(aux->country.month>month_final || aux->country.month<month_init){
elim=aux;
aux=aux->next;
free(elim);
}
else{
if(aux2==NULL){
aux2=aux;
}
aux=aux->next;
}
}
return aux2;
}
これは私が望むうなずきを取得していないようですが、それらをクリアする代わりに、単に乱数を入れます。 疑いはありますか? 前もって感謝します。
リンクリスト
A->B->C
があるとします 。B
を解放するとき ノード、前のノードA
、あなたのコードでは、それはまだ古いメモリ位置B
を指します 新しいノードC
ではありません 。乱数は、セグメンテーション障害ではない場合、B
の単なるガベージメモリです 以前は読まれていました。2つのポインター
aux
を使用して修正します 、およびahead
。ザ・aux
ポインタがahead
の後ろに留まる 1つのノード、およびahead
の場合 失敗した制約free
を渡します それ、ahead
を割り当てるahead->next
へ 、およびaux
を更新 それに応じて。