1つだけ過去を変えられるとしたら?

あるHPのコードを参考に文字をクリップボードへ
コピーするコードを書いてみましたが、エラーが
できます。なにかおかしいかご指摘いただけないでしょうか?

HGLOBAL hText;
wchar_t *pText;
hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 4);
pText = (wchar_t*)GlobalLock(hText);
lstrcpy(pText, L"abc");
GlobalUnlock(hText);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT, hText);//ここでヒープが壊れていると起こられます。
CloseClipboard();

もっとも単純なテストコードです。
いろいろとチェックを手抜きしてますが、とりあえずOKとします。

A 回答 (1件)

GlobalAllocで割り当てサイズとして「4」を指定していますが、これは「4バイト」を意味します。



ところが、lstrcpyでコピーしているL"abc"は4文字=8バイトを占有するので、確保したメモリの量を超えてメモリを書き換え(=破壊)してしまっています。

これが原因ではないでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

いまちょうど自己解決したところです。
原因はおっしゃる通りです。
ただしくは
hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 4 * sizeof(wchar_t));
です。

で、返信がない場合どうやって質問を締めようかと悩んでいたところです^^;

#いつになったらこの文字操作に慣れてくるんだろう。。

お礼日時:2005/09/26 03:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報