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

4

1 回答 1

4

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

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

于 2011-05-05T03:14:32.620 回答