必要ないノードの削除処理を以下のように行ったがメモリーは増大していく。free()した領域は再利用されていないのだろうか?俺のミス・・?回帰処理になんかあるのかな?どうやら、これ以上削れないっぽい。
/*
q->node=101010101010101010101010101010201040404
q->node=10101010101010101010101010101020104040401
q->node=1010101010101010101010101010102010404040101
q->node=101010101010101010101010101010201040404010101
q->node=1010101010101010101010101010102010404040102
q->node=101010101010101010101010101010201040404010201
q->node=1010101010101010101010101010102010404040103
q->node=101010101010101010101010101010201040404010301
q->node=101010101010101010101010101010201040405
q->node=10101010101010101010101010101020104040501 <---D
q->node=1010101010101010101010101010102010404050101 <---A
q->node=101010101010101010101010101010201040405010101 <---B
q->node=101010101010101010101010101010201040405010102 <---B
q->node=1010101010101010101010101010102010404050102 <---C
C地点で、BはCよりもノードが深い(長い)ので削除
Aは長さが同じなので削除。DはCよりも浅いので削除しない。
以上を繰り返す。
q->node=101010101010101010101010101010201040405 <---G
q->node=101010101010101010101010101010201040405030301 <---F
q->node=10101010101010101010101010101020105 <---E
E地点ではFのが長いのでF,G削除
*/
char str2[BUFF_SIZE]; str2[0] = '\0';
char buff[BUFF_SIZE]; buff[0] = '\0';
int n_len1 = strlen(n->node);
int n_len2 = 0;
if(n != node_top){
// nから遡る
r = (NODE*)n->prev;
n_len2 = strlen(r->node);
if(n_len1 < n_len2){ //直前のノードが自分自身より長い場合に遡る
for(p = r; p !=NULL; ){
q = p;
p = (NODE*)p->prev;
n_len2 = strlen(p->node);
if(n_len1 > n_len2){
//深度が浅くなるので削除しない。bottom設定。
node_bottom = p;
p->next = 0;
//自分自身を削除
// printf("%s自分自身削除\n", n->node);
free(n);
break;
}else{
// printf("%s削除\n", p->node);
free(q);
}
}
}
}
printf("node view\n");
for(p = node_top; p !=NULL; ){
q = p;
if(p == node_bottom)break;
printf("q->node=%s\n",q->node);
// log3(q->node);
p = (NODE*)p->next;
}
以上の修正で実行
ログresult.txt一部分、104010604までを削除している。
node view
q->node=1
q->node=103
q->node=10303
q->node=1030306
q->node=103030603
q->node=104
q->node=10401
q->node=1040105
q->node=104010507
q->node=10401050705
q->node=1040105070505
q->node=104010507050501
q->node=104010507050502
q->node=104010507050503
q->node=104010507050504
q->node=104010507050505
q->node=104010507050506
q->node=104010507050507
q->node=104010507050508
q->node=1040106
q->node=104010603
q->node=10401060308
q->node=10401060309
q->node=104010604
q->node=10401060401
q->node=1040106040103
q->node=104010604010301
q->node=104010604010302
q->node=104010604010303
q->node=104010604010304
q->node=104010604010305
q->node=104010604010306
q->node=104010604010307
q->node=104010604010308
q->node=104010604010309
q->node=1040106040104
q->node=104010604010401
q->node=104010604010402
q->node=104010604010403
q->node=104010604010404
q->node=104010604010405
q->node=104010604010406
q->node=104010604010407
node view
q->node=1
q->node=103
q->node=10303
q->node=1030306
q->node=103030603
q->node=104
q->node=10401
q->node=1040105
q->node=104010507
q->node=10401050705
q->node=1040105070505
q->node=104010507050501
q->node=104010507050502
q->node=104010507050503
q->node=104010507050504
q->node=104010507050505
q->node=104010507050506
q->node=104010507050507
q->node=104010507050508
q->node=1040106
q->node=104010603
q->node=10401060308
q->node=10401060309
q->node=104010604
PR