文字列(CString) -> CByteArray に変換するコード


ナオ  2011-01-26 19:24:53  No: 72263  IP: [192.*.*.*]

文字列(CString)をCByteArrayに変換するコードを書いたのですが、
このコードを使用しているプログラムを常時使用していると、この処理の箇所でどうも
フリーズする傾向があるみたいです。稀にしか起きないのでまだ詳細がわかりません。  なにかまずい処理をしているでしょうか?

void StrUtil::Str2ByteArray( CString& strVal, CByteArray& aVal )
{
  BYTE *pByteArray = (PBYTE)(LPCTSTR)strVal.GetBuffer();
  DWORD dwDataLength = (strVal.GetLength() + 1) * sizeof(TCHAR);

  aVal.RemoveAll();
  aVal.SetSize(dwDataLength);
  memcpy(aVal.GetData(), pByteArray, dwDataLength);
  strVal.ReleaseBuffer();

  for(int ii = 0; ii < aVal.GetSize(); ii++) {
    aVal[ii] ^= 0xffff;  //ビット反転
  }
}

編集 削除
gak  2011-01-27 18:14:51  No: 72264  IP: [192.*.*.*]

> for(int ii = 0; ii < aVal.GetSize(); ii++) {
>     aVal[ii] ^= 0xffff;  //ビット反転
> }
この処理の目的は何だろう? '\0'終端も反転しているのは意図通り?
仮に、この処理後に
    LPCTSTR(aVal.GetData())
なんて事をしちゃうと文字列終端が見つからずにメモリ上を突っ走っちゃうけど大丈夫?

編集 削除
ナオ  2011-01-28 02:30:24  No: 72265  IP: [192.*.*.*]

大丈夫です。説明不足で申し訳ありません。
この処理の後にCByteArrayの中身をシリアライズでファイル出力します。簡単な暗号化を行っているだけです。
どうも、この関数内部でフリーズしている可能性が高いとこまではわかったのですが、
もしかすると他にスレッドが存在するので、その可能性も少しあります。

上記コードで問題がなければ、他の原因をあたろうと思っています。
自分で確認したところ、問題はないと思っているのですが・・・

編集 削除
gak  2011-01-28 18:01:40  No: 72266  IP: [192.*.*.*]

> 自分で確認したところ、問題はないと思っているのですが・・・
そう見えるなぁ。
落ちるのではなくフリーズしているのならばスレッド絡みを疑うのもアリだと思う。

編集 削除