2011-10-21 2 views
0

を割り当てるときにクラッシュ:私は、テキストの大きな塊をコピーする場合はnullターミネータを割り当てるときWindowsのクリップボード機能、私は次の操作を実行し、テキストをコピーするために私の機能では、ヌルターミネータ

// Allocate a global memory object for the text. 
    hglbCopy = GlobalAlloc(GMEM_MOVEABLE, 
     ((text.length() + 1) * sizeof(WCHAR))); 

    if (hglbCopy == NULL) 
    { 
     CloseClipboard(); 
     return; 
    } 

    // Lock the handle and copy the text to the buffer. 
    lptstrCopy = (LPWSTR)GlobalLock(hglbCopy); 
    memcpy(lptstrCopy, text.c_str(), 
     (text.length() + 1) * sizeof(WCHAR)); 
    lptstrCopy[(text.length() + 1) * sizeof(WCHAR)] = (WCHAR) 0; // null character CRASHES HERE 
    GlobalUnlock(hglbCopy); 

、それがクラッシュします。割り振るメモリの量を計算するのに何か問題がありますか?

おかげ

答えて

1

あなたはヌルターミネータを自分で割り当てる必要はありません。

あなたがそれをしたい場合は、自分がこのようにそれを実行します。

((WCHAR*)lptstrCopy)[text.length()]=L'\0'; 
+0

よしありがとう! – jmasterx

+2

言い換えれば、 'lptstrCopy'は' WCHAR'の配列であり、インデックスを付ける必要があります。 'char'の配列としてインデックスを作成しています。 –

+2

まだバッファが1つの 'WCHAR'でオーバーフローしています。 '+ 1'を取り除く。実際、ライン全体はまったく必要ではありません。ヌルターミネータはmemcpyの一部としてコピーされました。 –

関連する問題