K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>昨日は帰省してネットから切り離された上、風邪で実家で寝込んでまして、 >すっかり遅くなりましてすみません。 > >>>(2)725~728行目のみをコメントアウト >… >>----上の変更を加えて sh test.sh を実行 > >これでかなり原因が絞れました。ありがとうございます。 > >最近追加した文字リテラル関連でバグを入れてしまったかな、と思い、 >追求したところ、怪しいところがあっさり見つかりました… > >compiler以下のstring.cの中に、以下の関数があります(59行目)。 > >int >dkc_close_character_literal(void) >{ > DVM_Char buf[1]; > >ここの > >誤) > DVM_Char buf[1]; > >を > >正) > DVM_Char buf[2]; > >に直してコンパイル/実行を試していただけますか。 ># mainの下でmakeするだけではここのコンパイルは通らないので、 ># compilerの下でいったんmakeしてからmainの下でもmakeするか、 ># mainの下で touch main.c してからmainの下でmakeしてください。 > >ここは文字リテラル(「'本'」のような1文字の定数)の値を抽出しているところで、 >1文字であることはその前後の判定で明らかなので、1文字分のバッファを取っておけば >よいかと思っていたのですが、 > > dvm_mbstowcs(st_string_literal_buffer, buf); > >実際に変換しているこの関数では、末尾にL'\0'を補っているので、 >領域破壊が起きていました。末尾ナル文字分を忘れるとは初心者並みのポカでした。 > >4バイトかそこらのスタック領域の破壊だと、(現にうちの環境で動いていたように) >たまたま動いてしまう場合も多く、つよしさんのところでこの現象で死んでいるか >どうかはわかりませんが、可能性は高いと思います。 > >いろいろと情報いただきありがとうございました。送球に修正してリリースします。
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!