[▲前のスレッド]

2013/12/25 (水) 09:32:43 syat  
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
[2079] 名前を付けて保存でエラーになることがある
SVN最新ので名前を付けて保存すると落ちる時があります。
再現条件がはっきりしないのですが、対括弧の強調ありで、改行コード変換をしたときに落ちやすいようです。

スタックトレース:
>        sakura.exe!CNativeW::GetSizeOfChar(const wchar_t * pData=0xabababab, int nDataLen=4, int nIdx=0)  行 213 + 0x6 バイト
         sakura.exe!CLayoutMgr::LogicToLayout(const CStrictPoint<... > & ptLogic={...}, CStrictPoint<... > * pptLayout=0x0018a1a0, CStrictInteger<1,1,1,0,1> nLineHint={...})  行 859 + 0x1f バイト
         sakura.exe!CEditView::DrawBracketPair(bool bDraw=false)  行 143
         sakura.exe!CCaret::MoveCursor(CStrictPoint<... > ptWk_CaretPos={...}, const CStrictPoint<... > * pptWk_CaretPosLogic=0x0018ae54, bool bScroll=false, int nCaretMarginRate=20, bool bUnderLineDoNotOFF=false, bool bVertLineDoNotOFF=false)  行 373
         sakura.exe!CCaret::MoveCursorFastMode(const CStrictPoint<... > & ptWk_CaretPosLogic={...})  行 398 + 0x24 バイト
         sakura.exe!CEditView::ReplaceData_CEditView3(C
RangeBase<CStrictPoint<... > > sDelRange={...}, std::vector<CLineData,std::allocator<CLineData> > * pcmemCopyOfDeleted=[...](), std::vector<CLineData,std::allocator<CLineData> > * pInsData=[1]({cmemLine={...} nSeq=4 }), bool bRedraw=false, COpeBlk * pcOpeBlk=0x0278fde8, int nDelSeq=4, int * pnInsSeq=0x00000000, bool bFastMode=true, const CRangeBase<CStrictPoint<... > > * psDelRangeLogicFast=0x0018b3f8)  行 949
         sakura.exe!CEditView::ReplaceData_CEditView(co
nst CRangeBase<CStrictPoint<... > > & sDelRange={...}, const wchar_t * pInsData=0x009ba638, CStrictInteger<0,1,1,1,1> nInsDataLen={...}, bool bRedraw=false, COpeBlk * pcOpeBlk=0x0278fde8, bool bFastMode=true, const CRangeBase<CStrictPoint<... > > * psDelRangeLogicFast=0x0018b3f8)  行 699
         sakura.exe!CEditView::ReplaceData_CEditView2(c
onst CRangeBase<CStrictPoint<... > > & sDelRange={...}, const wchar_t * pInsData=0x009ba638, CStrictInteger<0,1,1,1,1> nInsDataLen={...}, bool bRedraw=false, COpeBlk * pcOpeBlk=0x0278fde8, bool bFastMode=true)  行 716
         sakura.exe!CDocVisitor::SetAllEol(CEol cEol={...})  行 51
         sakura.exe!CSaveAgent::OnBeforeSave(const SSaveInfo & sSaveInfo={...})  行 107
         sakura.exe!CDocSubject::NotifyBeforeSave(const SSaveInfo & a={...})  行 116 + 0x73 バイト

2013/12/25 (水) 17:06:14 もか  
INCM1.23a
[2080] Re: 名前を付けて保存でエラーになることがある
MoveCursorFastMode -> LogicToLayoutですか。
解決策は、MoveCursorFastModeでMoveCursorを呼ばず、単純に座標設定だけにするとかでしょうか。

2013/12/25 (水) 21:45:43 もか  
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
[2081] Re2: 名前を付けて保存でエラーになることがある
パッチを登録しました。
https://sourceforge.net/p/sakura-editor/patchunicode/722/

2013/12/25 (水) 22:04:24 syat  
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
[2082] Re2: 名前を付けて保存でエラーになることがある
▼ もかさん
> MoveCursorFastMode -> LogicToLayoutですか。
> 解決策は、MoveCursorFastModeでMoveCursorを呼ばず、単純に座標設定だけにするとかでしょうか。


LayoutToLogicExのGetSizeOfChar(落ちてるところ)の手前でGetLineStrを呼んでいますが、その中でpLayout->GetDocLineRef()内のCNativeが壊れているor未初期化でおかしなポインタを返しているようです。
うーん、わからん。

2013/12/26 (木) 01:55:32 もか  
INCM1.23a
[2083] Re3: 名前を付けて保存でエラーになることがある
改行を改行に置換するような処理の場合、
CSearchAgent::ReplaceDataの中では、改行がまず削除されて次の行と一度連結して、
次の行が削除された後、再度行が分割されて、新しくCDocLineが生成されます。
CLayoutMgr::GetLineStrの
(*ppcLayoutDes)->m_pCDocLine
は、fastModeの途中ではCLayoutMgrが更新されないので、
その削除されたCDocLineを参照したままで、その先で落ちてるんだと思います。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]