c++代码中共享文件映射对象大小的问题

Issues with the size of the shared file mapping object in C++ code

本文关键字:问题 对象 映射 代码 共享文件 c++      更新时间:2023-10-16

我正在尝试写入一个(共享的)命名文件映射对象,如:

//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,这对我来说没有意义。

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

0xc00000fd是堆栈溢出。您是否将缓冲区声明为具有该大小的局部变量?如果是这样,那是你的问题。

将缓冲区从堆栈中移出,将其设置为全局或静态,或者使用new/delete动态分配。