2011-05-05 52 views
0
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个指针等于虚拟指针。然后,我使用进度(现在也指向保留空间)提交该空间的那个空间,然后增加进度指针。然后我尝试在现在提交的空间中设置一个值,这个值应该指向mainhashbuf,但是我得到一个写入异常。我是否使用virtualalloc错误和/或对指针实际工作有错误的概念?virtualalloc问题

回答

4

VirtualAlloc尝试分配连续范围的虚拟页面。 1 < < 31 == 0x80000000,这是内存用户模式进程在默认情况下在Windows上具有的内存量。我严重怀疑对第一个VirtualAlloc的调用是否成功。

选择较低的值并重新开始。另外,你为什么使用VirtualAlloc?当你不熟悉指针和直接内存管理时,在页面大小的单元中提交和保留的概念可能有点令人生畏。尝试先使用malloc/HeapAlloc?另外,检查VirtualAlloc的返回值并确保它们不是NULL。

+0

哈哈,你说得对,第一次使用virtualalloc的号码使用的数字太大了。其他一切都是正确的。我确认Virtualalloc在某个其他人的电脑上工作,但显然没有在我的电脑上工作。 – Jake 2011-05-05 03:31:45