◀ANSI版開発トップへ
  • 3937 全置換で強制終了
    • 3940 Re:全置換で強制終了
      • 3941 Re2:全置換で強制終了
  • [3937] 全置換で強制終了 berupon 2005年06月01日 11:01

    Ver. 1.5.3.1を使っています。

    テキストの内容は、
    \r\r\n\r (0D 0D 0A 0D)
    で、

    置換機能で正規表現にチェックを付けて、
    置換前 : \r$
    置換後 : (空)
    で、全て置換を行うと、

    "0x00413707" の命令が "0x00000000" のメモリを参照しました。メモリが "read" になることはできませんでした。
    ~~

    と表示されるアプリケーションエラーを起こしてしまいます。
    • [3940] Re:全置換で強制終了 berupon 2005年06月01日 23:55

      ちょっと追ってみたところ、
      CEditView_Command.cpp
      void CEditView::Command_REPLACE_ALL( void )
      8032行目、
      >> // 置換後文字列への書き換え
      >> Command_INSTEXT( FALSE, cRegexp.GetString(), cRegexp.GetStringLen(), TRUE );
      で、cRegexp.GetString()はNULLを返しているのですが、
      cRegexp.GetStringLen()は0を返していないのが原因のように思えます。

      CBregexp.h の145行目
      int CBregexp::GetStringLen(void)
      に、
      if (!m_pRegExp->outendp || !m_pRegExp->outp)
      return 0;
      とか追加すれば解決するような気がします。
      • [3941] Re2:全置換で強制終了 かろと 2005年06月03日 02:14

        >タイトル: Re2:全置換で強制終了
        >発言者: berupon
        >ちょっと追ってみたところ、
        >CBregexp.h の145行目
        >int CBregexp::GetStringLen(void)
        >に、
        > if (!m_pRegExp->outendp || !m_pRegExp->outp)
        > return 0;
        >とか追加すれば解決するような気がします。

        追跡、ありがとうございます。

        BREGEXP.DLLが、空置換した時に、
        outendpも outp も NULLになってたのですが、そうでない場合があって、
        outp だけが NULLがあるみたいですね。

        最低でも、
        if (m_pRegExp->outp == NULL) {
        return 0;
        }
        は要るみたいです。
        (outendpだけがNULLってのは、事実上ないと思いますが、念のため見てもよろしいかと)