作者: Bruce.
日時: 2005/2/07(21:34)
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/