1

次のように(共有)名前付きファイルマッピングオブジェクトに書き込もうとしています:

//ENTER CRITICAL SECTION FIRST
int ncbSzMapping = 0x92B8;    //Size of a shared struct

hFileMapping = CreateFileMapping((HANDLE)INVALID_HANDLE_VALUE,
    NULL, PAGE_READWRITE, 
    0, ncbSzMapping, 
    _T("mapping_name"));
if(hFileMapping)
{
    BYTE* pRWData = MapViewOfFile(hFileMapping, 
        FILE_MAP_ALL_ACCESS, 0, 0, ncbSzMapping);
    if(pRWData)
    {
        //Write data into 'pRWData' of 'ncbSzMapping' bytes

        UnmapViewOfFile(pRWData);
    }
}

...
//LEAVE CRITICAL SECTION

上記のコードは問題なく動作します。しかし、上記のコードに変更するncbSzMapping0x8A8B8成功しますが、後でコードを下に移動すると、関数呼び出しの直前に例外 c00000fd が発生し、意味がありません。

そのサイズの増加が違いを生む理由とそれを修正する方法はありますか?

4

1 に答える 1

3

0xc00000fd はスタック オーバーフローです。そのサイズのローカル変数としてバッファーを宣言していますか? もしそうなら、それはあなたの問題です。バッファーをグローバルまたは静的にしてスタックから移動するか、新規/削除を使用して動的に割り当てます。

于 2013-01-21T18:33:11.613 に答える