◀ANSI版開発トップへ
  • 5252 CDocLineMgrのメモリリーク
    • 5253 Re:CDocLineMgrのメモリリーク
      • 5254 Re2:CDocLineMgrのメモリリーク
      • 5255 Re2:CDocLineMgrのメモリリーク
  • [5252] CDocLineMgrのメモリリーク kobake 2008年03月21日 02:06

    バグ報告です。

    行数が1のときに CDocLineMgr::DeleteNode が呼ばれると
    CDocLine が解放されないまま変数クリアが行われるので
    メモリリークが発生します。

    行の無い状態から、行を作って消して作って消してを繰り返すと
    無尽蔵に(一回の量はすごく小さいですけど)メモリが消費されると思われます。
    • [5253] Re:CDocLineMgrのメモリリーク ryoji 2008年03月21日 02:50

      ▼ kobakeさん
      > 行数が1のときに CDocLineMgr::DeleteNode が呼ばれると
      > CDocLine が解放されないまま変数クリアが行われるので
      > メモリリークが発生します。

      次のような簡単なパッチでいいんでしょうか?
      もしこれで良さそうならPatchesにSubmitしておこうと思いますが...

      --- sakura_core/CDocLineMgr.cpp (revision 1230)
      +++ sakura_core/CDocLineMgr.cpp (working copy)
      @@ -2458,6 +2458,7 @@
      m_nLines--; /* 全行数 */
      if( 0 == m_nLines ){
      /* データがなくなった */
      + delete pCDocLine;
      Init();
      return;
      }
      • [5254] Re2:CDocLineMgrのメモリリーク kobake 2008年03月21日 04:07

        ▼ ryojiさん
        > ▼ kobakeさん
        > > 行数が1のときに CDocLineMgr::DeleteNode が呼ばれると
        > > CDocLine が解放されないまま変数クリアが行われるので
        > > メモリリークが発生します。
        >
        > 次のような簡単なパッチでいいんでしょうか?
        > もしこれで良さそうならPatchesにSubmitしておこうと思いますが...
        >
        > --- sakura_core/CDocLineMgr.cpp (revision 1230)
        > +++ sakura_core/CDocLineMgr.cpp (working copy)
        > @@ -2458,6 +2458,7 @@
        > m_nLines--; /* 全行数 */
        > if( 0 == m_nLines ){
        > /* データがなくなった */
        > + delete pCDocLine;
        > Init();
        > return;
        > }

        はい、それでOKだと思います。
        ただ、今のところは自分はANSI版への協力(「ちゃんとした」レビューなど)はできないと思うので、自分以外の他の方にレビューをお願いしたいです。
      • [5255] Re2:CDocLineMgrのメモリリーク kobake 2008年03月21日 06:43

        追記です。
        UNICODE版ソースコードでは既に修正を行っています。
        (まだ公開できていませんけど)