◀Unicode版開発トップへ
  • 2315 特定文字を入力&操作後に Runtime Error
    • 2316 Re:特定文字を入力&操作後に Runtime Error
      • 2317 Re2:特定文字を入力&操作後に Runtime Error
        • 2318 Re3:特定文字を入力&操作後に Runtime Error
  • [2315] 特定文字を入力&操作後に Runtime Error さめたすたす 2015年11月21日 01:26

    また、怪しい動きを見つけました。

    再現できないなどあれば教えてください。

    OS: Windows 8.1
    ver: 後述
    現象:

    特定文字を入力&操作後に Runtime Error! で落ちる。

    ■ 手順

    1. 設定→「タイプ別設定一覧」→「C/C++」を選び一時適用
    2. スペース1文字とスラッシュ2文字を入力
    ________________
    1| //[EOF]
    ↑みたいな状態
    3. 3文字左に戻り「Enter」を入力
    ________________
    1|↲
    | //[EOF]
    ↑みたいな状態

    で↓

    ---------------------------
    Microsoft Visual C++ Runtime Library
    ---------------------------
    Runtime Error!

    Program: C:\*****\sakura.exe

    abnormal program termination
    ---------------------------
    OK
    ---------------------------

    ■ 問題なし

    v2.2.0.0

    ■ Runtime Error!

    v2.2.1.0 r4029+プロポーショナル
    ※ http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&tree=r2279 で公開されている物

    v2.3.0.0
    • [2316] Re:特定文字を入力&操作後に Runtime Error ds14050 2015年11月23日 16:56

      スマートインデント関連で無限ループに入ってメモリを食いつぶしている感じです。

      n = 0 から n = nLineLen2-1 までのループの中で n に k を代入してるのがこちらです。
      http://sourceforge.net/p/sakura-editor/code/4035/tree/sakura/trunk2/sakura_core/types/CType_Cpp.cpp#l1427
      デバッガでは n = 1; k = 0; nLineLen2 = 3 に見えますので、n = 1 のターンが永遠に続きます。

      行コメントを見つけたときに通るパスのようなので、行末までスキップ、という
      コードなのかなと思いますが、n = k の k に何を期待しているのか、k という
      ほとんど無名に等しい変数が何者なのか、よくわかりません。
      • [2317] Re2:特定文字を入力&操作後に Runtime Error もか 2015年11月23日 20:10

        n=k
        ↓
        n=nLineLen2 でよさそうですね。
        だいぶ前に書いたので忘れたけどループの処理を見た感じだと
        for(n=0;n<k;n++)にしたほうが若干無駄が少ないかもしれません
        • [2318] Re3:特定文字を入力&操作後に Runtime Error ds14050 2015年11月24日 17:24

          > for(n=0;n<k;n++)
          についてはコメントできるほど知りませんが、

          > n=nLineLen2
          については、ループ継続判定の前に n++ されることを考えると
          n=nLineLen2-1 の方が適切ではないかなと思います。
          結果は同じですけどね。