Bruce. です。
> ちょっと調べてみましたが、print関数の引数に直接length()の戻り値を
> 使うとおかしくなるようです。いったん変数に受けてやって、その変数を
> 使って出力すると正常に動作します。
文字列連接を行っているときに、ワークエリアを間違って解放しているのが
直接の原因でした。その原因まではたどれたのですが、そのまた原因までは
時間切れで分かりませんでした。
参考までにパッチ。
--- eval.c.1~ 2005-02-04 08:21:18.460937000 +0900
+++ eval.c 2005-02-07 17:12:05.674030300 +0900
@@ -1091,7 +1091,8 @@ r_tree_eval(register NODE *tree, int isc
while (*strp != NULL) {
memcpy(dest, (*strp)->stptr, (*strp)->stlen);
dest += (*strp)->stlen;
- unref(*strp);
+ if ((*strp)->wstptr != str)
+ unref(*strp);
strp++;
}
r = make_str_node(str, len, ALREADY_MALLOCED);
上記のパッチを適用したものは例によって
http://www.kt.rim.or.jp/%7ekbk/gawk-3.1/gawk-mbcs-win32-20050207.zip
e623dd0ea363355802ca57ad583bc408 *gawk-mbcs-win32-20050207.zip
に置きました。対症療法的なパッチなので副作用が予想されます。
#メモリリークしてる可能性大です
このパッチにたどり着くのに半日掛かりました(^^:
マイクロソフトのサイトからwindbgというデバッガをダウンロードし、
それを使ってステップ実行したらバグが再現しない。
ここでもないあそこでもないとprintfデバッグを続け、
直接の原因が分かってからその原因がわかるまで数時間(^^;
コーヒーの量が増えましたですよ。
--
木村浩一
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mail kbk@...
web www.kt.rim.or.jp/~kbk/index.html#zakkicho
homepage3.nifty.com/farstar/