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和pointers指针是指向char的指针。我首先保留空间,用虚拟指针指向那个空间。然后,我将其他两个指针设置为等于虚拟指针。然后,我使用increment (现在也指向保留空间)提交(1<<15)该空间,然后递增pointer指针。然后,我尝试在现在提交的空间中设置mainhashbuf应该指向的值,但是我得到了一个写入异常。我是否使用了错误的virtualalloc和/或对指针的实际工作方式有错误的概念?
发布于 2011-05-05 11:14:33
VirtualAlloc尝试分配连续范围的虚拟页面。1<<31 == 0x80000000,这是默认情况下用户模式进程在windows上的内存量。我非常怀疑对第一个VirtualAlloc的调用是否成功。
选择较低的值,然后重新开始。另外,你为什么要使用VirtualAlloc?当您刚接触指针和直接内存管理时,在页面大小的单元中提交和保留的概念可能有点令人生畏。先尝试使用malloc/HeapAlloc?另外,检查来自VirtualAlloc的返回值,并确保它们不为空。
https://stackoverflow.com/questions/5892199
复制相似问题