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

上面的代码没有问题。但是当我将上面的代码更改为ncbSzMapping成功0x8A8B8但后来在代码中我得到一个异常 c00000fd 就在一个对我没有意义的函数调用之前。

知道为什么尺寸增加会产生影响以及如何解决它吗?

4

1 回答 1

3

0xc00000fd 是堆栈溢出。您是否将缓冲区声明为具有该大小的局部变量?如果是这样,那是你的问题。通过将缓冲区设为全局或静态,将缓冲区移出堆栈,或使用 new/delete 动态分配它。

于 2013-01-21T18:33:11.613 回答