SigScheme開発録 (57)
こっちは Invalid Others Object で大ハマリ。八方塞がりだな、これは(笑)
私信: Yamakenさんへ。
+ scm_gc_protect(&scm_in); + scm_gc_protect(&scm_out); + scm_gc_protect(&scm_err); scm_in = scm_make_shared_file_port(stdin, "stdin", SCM_PORTFLAG_INPUT); scm_out = scm_make_shared_file_port(stdout, "stdout", SCM_PORTFLAG_OUTPUT); scm_err = scm_make_shared_file_port(stderr, "stderr", SCM_PORTFLAG_OUTPUT);
これだと、1回目のscm_make_shared_file_portでGCがinvokeされた時に、不正なscm_outとscm_errを見てしまう。正しくは次のようにするべきではないかと。
scm_in = scm_make_shared_file_port(stdin, "stdin", SCM_PORTFLAG_INPUT); + scm_gc_protect(&scm_in); scm_out = scm_make_shared_file_port(stdout, "stdout", SCM_PORTFLAG_OUTPUT); + scm_gc_protect(&scm_out); scm_err = scm_make_shared_file_port(stderr, "stderr", SCM_PORTFLAG_OUTPUT); + scm_gc_protect(&scm_err);
って、元々やってなかったのは俺な訳ですが。