проблема с virtualalloc - PullRequest
       33

проблема с virtualalloc

0 голосов
/ 05 мая 2011
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 и / или имею неправильное представление о том, как на самом деле работают указатели? </p>

1 Ответ

4 голосов
/ 05 мая 2011

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

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

...