小编Fal*_*con的帖子

VirtualAlloc失败

我试图使用VirtualAlloc来保留和提交一块内存,然后再次扩展该块.不幸的是,它返回NULL并返回错误ERROR_INVALID_ADDRESS,尽管VirtualQuery说请求的地址范围是空闲的.这是我的代码:

void* allocation = VirtualAlloc(NULL, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
void* desiredNextAllocation = (char*)allocation + 4096;
MEMORY_BASIC_INFORMATION info;
size_t memory_info = VirtualQuery(desiredNextAllocation, &info, sizeof(info));
void* extended = VirtualAlloc(desiredNextAllocation, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
Run Code Online (Sandbox Code Playgroud)

第一个分配返回0x00000000000d0000.对VirtualQuery的调用导致'info'中的以下数据:

    BaseAddress 0x00000000000d1000  void *
    AllocationBase  0x0000000000000000  void *
    AllocationProtect   0x00000000  unsigned long
    RegionSize  0x00000000000ff000  unsigned __int64
    State   0x00010000  unsigned long
    Protect 0x00000001  unsigned long
    Type    0x00000000  unsigned long
Run Code Online (Sandbox Code Playgroud)

我认为这意味着有0xff可用页面从0xd1000开始处于MEM_FREE状态.那么为什么我尝试在0xd1000提交页面失败?

我正在运行Windows 7,这是一个64位版本.

我已经阅读了几篇关于VirtualAlloc的StackOverflow帖子,但它们似乎都暗示这段代码应该像我对文档的理解一样工作.

c++ memory windows virtualalloc

6
推荐指数
1
解决办法
1140
查看次数

标签 统计

c++ ×1

memory ×1

virtualalloc ×1

windows ×1