動的メモリ 解放がうまくいかない
よろしくお願いします。
一ファイル20万行程度のCSV形式のテキストファイルが、50個ほどあります。
これを一行づつ読み込んで、strtok( ,",")でデータを取得しようと思っています。
ファイルの行数はまちまちなので、新しいファイルを読み込むときに
そのファイルの行数を調べて(ここでは count 行あります)
callocをつかって、メモリを確保しました。
btxt=(char **)calloc(count,sizeof(char *));/*動的メモリ確保*/
for(i=0;i<count;i++) btxt[i]=(char *)calloc(120,sizeof(char)); /*一行120文字まで*/
if(btxt==NULL){printf("btxt 確保エラー\n"); exit(0);}
上記btxt配列にすべての行数を読み込んで、strtok()処理をした後
for(v=0;v<120;v++){
if(btxt[v]){
free(btxt[v]);
btxt[v]=NULL;
}
}
free(btxt);
btxt=NULL;
で解放してから、次のファイルに移ります。
問題は、ループするごとにメモリ容量がどんどん減ってきて、30ループもさせると
メモリ不足でエラーが出ることです。
ブレークポイントを使って調べてみたのですが
ループ一回目 calloc前 707.7 MB: calloc後 748.6MB 解放(したつもり)後 747.9 MB
ループ二回目 calloc前 750.6 MB: calloc後 794.6MB 解放(したつもり)後 793.8 MB
・・・・・・・・・・・・・・・・・・・
ループ四回終了時には868.3MBにもなって、初めより160MBも使ってしまいます。
free()が効いてないと思うのですが、どこがおかしいのか教えてくださいませ。
お礼
お返事ありがとうございました。 あれから私なりにいろいろ試したのですが、やはり無理でした。とりあえずこの問題は置いとくことにしました。 この度はありがとうございました。また機会があればよろしくお願いします。