下記のMFCのダイアログベースのアプリケーションのコード(コードは簡略化しています)でエラーでプログラムが落ちてしまいます。
ただ、2つの問題点のうち一つを修正すると落ちなくなりました。
問題点1.main関数のCStringの型キャストで引数に渡していることが問題?
問題点2.関数Aの参照に文字列のポインタを代入していることが問題?
エラーメッセージは"DAMAGE : after Normal block (#63093) at 0x01C79610"
デバッグメッセージはmemory check error at 0x01C7963C = 0x00, should be 0xFD.となっています。
両方に問題あるのか、それともいずれか一つだけ問題あるのか、わかりません。
下記のコードのどこに問題点があるか教えていただければ有難いです。お手数おかけいたしますが宜しくお願いします。
void CMyClass::main(){ CString str; char tmpbuf[180] = {0};//一時的に使用 // 最終的にセットされる文字列 char setBuffer1[180]; char setBuffer2[180]; char setBuffer3[180]; //落ちないケース(問題点1修正済) //文字列1の処理 FuncA(str);//文字列取得 wsprintf( tmpbuf, "%s", str); FuncB(tmpbuf);//文字列加工 str = tmpbuf; wsprintf( setBuffer1, "%s", str) //文字列2の処理 FuncA(str);//文字列取得 wsprintf( tmpbuf, "%s", str); FuncB(tmpbuf);//文字列加工 str = tmpbuf; wsprintf( setBuffer2, "%s", str) //文字列3の処理 FuncA(str); wsprintf( tmpbuf, "%s", str); FuncB(tmpbuf); str = tmpbuf; wsprintf( setBuffer3, "%s", str) // 落ちるケース(問題点1修正前) //文字列1の処理 // FuncA(string); // FuncB((char*)((LPCTSTR)str)); // wsprintf( setBuffer1, "%s", str) //文字列2の処理 // FuncA(str); // FuncB((char*)((LPCTSTR)str)); // wsprintf( setBuffer2, "%s", str) //文字列3の処理 // FuncA(str);//ここで落ちる // FuncB((char*)((LPCTSTR)str)); // wsprintf( setBuffer3, "%s", str) } //関数Aの内容(文字列取得) void CMyClass::FuncA( CString& str ) { char tmp[256] = {0}; GetStringFunc(tmp);//文字列を取得 //str = tmp;//落ちるケース(問題点2修正前) str.Format( tmp );//落ちないケース(問題点2修正済) } //関数Bの内容(文字列加工) void CMyClass::FuncB( char* buffer ){ CString tmpCstr = buffer; ChangeStringFunc(&tmpCstr);//文字列を加工 wsprintf(buffer, "%s", tmpCstr); }

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/21 01:36
2018/09/21 01:43
2018/09/21 01:44
2018/09/21 01:46