2 10月

あふwやExplzhで7z/zip解凍中にTascherを表示すると処理が中断してしまう

タイトルそのままです。
あふwは1.58、Explzhは7.24、7-zip32.dllは文字化け対策版 Ver.15.07.00.01 beta、TascherはVer.1.56です。
調べてみると、どうやらDialog.cppのCDialog::Loop()内、

			if (msg.hwnd == m_hWndParent && msg.message == 0)
				::PostMessage(m_hWnd, WM_CLOSE, 0, 0);

でWM_CLOSEが投げられ、処理が中断しているご様子。

msg.messageが0、つまり、WM_NULLの時に発生する…
ロシアと思い、Tascherの「MMHook.dll」内、UnhookWindowsHookEx()後の

PostMessage(HWND_BROADCAST,WM_NULL,0,0);

を削除すると、無事解凍処理が中断しなくなりました!!やったね!!

24 12月

vector iterators incompatible


#include<vector>

int main(){
    std::vector<int> v;

    v.push_back(100);
    v.push_back(101);

    for(std::vector<int>::iterator ite=v.begin(),
        end=v.end();
        ite!=end;){
        if(*ite%2){
            ite=v.erase(ite);
        }else{
            ++ite;
        }
    }
    return 0;
}

 

vectorで要素のerase()を行う上記コードを実行すると、

vector iterators incompatible

と怒られてしまいます。

vector_err

 

原因は、erase()したにもかかわらず、初期化で代入した変数endを使用していることにあります。

        end=v.end();
        ite!=end;){

無駄な関数呼び出しをしないためによく用いられる手法ですが、

自分のような初心者が何も考えずにコピペすると陥る罠ですね。

広告