また、怪しい動きを見つけました。 再現できないなどあれば教えてください。 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
スマートインデント関連で無限ループに入ってメモリを食いつぶしている感じです。 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 という ほとんど無名に等しい変数が何者なのか、よくわかりません。
n=k ↓ n=nLineLen2 でよさそうですね。 だいぶ前に書いたので忘れたけどループの処理を見た感じだと for(n=0;n<k;n++)にしたほうが若干無駄が少ないかもしれません
> for(n=0;n<k;n++) についてはコメントできるほど知りませんが、 > n=nLineLen2 については、ループ継続判定の前に n++ されることを考えると n=nLineLen2-1 の方が適切ではないかなと思います。 結果は同じですけどね。