Проблема с virtualalloc

virtualpointer=(char*) VirtualAlloc (NULL, (unsigned __int64) (1<<31), MEM_RESERVE, PAGE_READWRITE); 
mainhashbuf=progression=virtualpointer;
VirtualAlloc (progression, (unsigned __int64) (1<<15), MEM_COMMIT, PAGE_READWRITE);
progression=progression+capacity;
*(mainhashbuf+1000)='c';

mainhashbuf, progression и virtualpointer являются указателями на char. Сначала я зарезервировал пространство, указав виртуальный указатель на это пространство. Затем я устанавливаю два других указателя равными виртуальному указателю. Затем я фиксирую (1<<15) этого пространства, используя прогрессию (которая теперь также указывает на резервное пространство), а затем увеличиваю указатель прогрессии. Затем я пытаюсь установить значение в этом теперь зафиксированном пространстве, на которое должен указывать mainhashbuf, однако я получаю исключение при записи. Я неправильно использую virtualalloc и / или имею неправильное представление о том, как на самом деле работают указатели?

1 ответ

Решение

VirtualAlloc пытается выделить непрерывный диапазон виртуальных страниц. 1<<31 == 0x80000000, то есть объем памяти процессов пользовательского режима в окнах по умолчанию. Я сильно сомневаюсь, что вызов на первый VirtualAlloc успешно.

Выберите более низкие значения и начните снова. Кроме того, почему вы используете VirtualAlloc? Когда вы новичок в указателях и прямом управлении памятью, концепция фиксации и резервирования в единицах размера страницы может быть немного устрашающей. Попробуйте сначала работать с malloc/HeapAlloc? Кроме того, проверьте возвращаемые значения из VirtualAlloc и убедитесь, что они не равны NULL.

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