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,progress和virtualpointer是char的指针。我首先保留空间,虚拟指针指向该空间。然后我将其他2个指针设置为等于虚拟指针。然后,我使用进展(现在也指向保留空间)提交该空间的(1 <&lt; 15),然后递增进度指针。然后我尝试在mainhashbuf应该指向的现在提交的空间中设置一个值,但是我得到了一个写入异常。我是否使用了virtualalloc错误和/或对指针实际工作方式的错误概念?
答案 0 :(得分:4)
VirtualAlloc尝试分配连续范围的虚拟页面。 1&lt;&lt; 31 == 0x80000000,这是默认情况下用户模式进程在Windows上具有的内存量。我严重怀疑对第一个VirtualAlloc的调用是否成功。
选择较低的值并重新开始。另外,为什么使用VirtualAlloc?当你是指针和直接内存管理的新手时,在页面大小的单元中提交和保留的概念可能有点令人生畏。尝试首先使用malloc / HeapAlloc?另外,检查VirtualAlloc的返回值并确保它们不为NULL。