はるほど、納得いたしました。
お忙しい中、丁寧なご返事、ありがとうございました。
- Kris
>確認しました。確かに無駄なことをしているように見えます。
>そもそも関数名がrelease_global_stringsなのに、文字列に対して
>何かしているように見えません。
>
>どうしてこうなったのかと思い、調べたのですが、どうも
>ver.0.1のこのコードが原因なのかと思います。
>
>
http://kmaebashi.com/programmer/devlang/crowbar_src_0_1_01/S/15.html#76
>static void
>release_global_strings(CRB_Interpreter *interpreter) {
> while (interpreter->variable) {
> Variable *temp = interpreter->variable;
> interpreter->variable = temp->next;
> if (temp->value.type == CRB_STRING_VALUE) {
> crb_release_string(temp->value.u.string_value);
> }
> }
>}
>
>ver.0.1時点では、参照カウンタのGCしかなかったので、インタプリタを
>破棄するときには文字列の領域はfreeする必要がありました。その処理が
>上記のコードです。
>
>ver.0.2でGCを組み込んだので、interpreter->variableをNULLにしておけば、
>文字列の領域もcrb_garbage_collect()の呼び出しで解放されます。
>ただ、ver.0.2を作ったとき、ヘッダファイルを直してコンパイルエラーを取って、
>という作業をしているときに、コンパイルエラーの原因のところだけ削って
>関数そのものが不要であることに気付かなかったのではないかと思います。
>すみませんでした。再確認のうえ、正誤表に載せる等対応します。
>
>細かいところまでソースを読み込んでいただき、作者冥利に尽きます。
>ありがとうございました。
>