Проблемы с размером общего объекта сопоставления файлов в коде C++

Я пытаюсь записать в (общий) именованный объект сопоставления файлов следующим образом:

//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 прямо перед вызовом функции, который не имеет смысла для меня.

Любая идея, почему это увеличение размера имеет значение и как это исправить?

1 ответ

Решение

0xc00000fd - переполнение стека. Вы объявляете буфер как локальную переменную с таким размером? Если так, то это твоя проблема. Переместите буфер из стека, сделав его глобальным или статическим, или выделите его динамически, используя new/delete.

Другие вопросы по тегам