掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
vectorデータが壊れるのはなぜでしょうか? (ID:73531)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
自己解決しました。 メモリリークかSTLのワナかと思い静的コード解析など試しておりましたが、単純なバグでした。 お恥ずかしい限りです。 CListCtrl::SetCheckをしてもOnLvnItemchangedが発生するのですね。 CListCtrlのチェック状態の変化をOnLvnItemchangedで取得していましたが、その中で変化があったItemだけでなくすべてのItemのチェック状態をCListCtrlから取得してm_vChkにセットしていました。 そのためm_vChkの中でTRUEになっていたものもSetCheckする前の状態(FALSE)を取得してm_vChkに値をセットしてしまいFALSEになっていました。 (-1になったのは更にCListCtrlにSubItemを追加していない範囲までGetCheckしていたためでした) この処理を ----- LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); bool bOld = ((pNMLV->uOldState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(2)); bool bNew = ((pNMLV->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(2)); if(bOld != bNew) { int iItem = pNMLV->iItem; m_vChk[iItem] = bNew; } ----- とすることで、対象を変化があったItemのみとし、CListCtrlからチェック状態を取得せずにメッセージで飛んでくる正しい値をm_vChkにセットするようにしました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.