c - VirtualAlloc 为批量文件读取分配内存时出现问题

标签 c windows winapi

我试图将一些数据从二进制文件读取到用 VirtualAlloc 分配的缓冲区中。 问题是我遇到了“坏 Pr”问题并且无法执行 fread。 这是我的代码:

fseek(myfile,0, SEEK_END);
DWORD FileSize = ftell(myfile);
fseek(myfile,0, SEEK_SET);
BYTE *buf = (BYTE * )VirtualAlloc(NULL,FileSize,MEM_RESERVE, PAGE_EXECUTE_READWRITE);
fread(buf,sizeof(BYTE),1,myfile);

恐惧 - 失败。 我做错了什么?

谢谢!

最佳答案

您需要同时传递MEM_RESERVEMEM_COMMIT。并且您需要使用 BYTE *,而不是 BYTE

fseek(myfile,0, SEEK_END);    
DWORD FileSize = ftell(myfile);    
fseek(myfile,0, SEEK_SET);    
BYTE * buf = (BYTE*)VirtualAlloc(NULL,FileSize,MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
fread(buf,FileSize,1,myfile);

关于c - VirtualAlloc 为批量文件读取分配内存时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796841/

相关文章:

c - return 并没有破坏我在 c 中的递归函数

c - 对于 CTR 模式,我是否需要输出缓冲区为 AES block 大小的倍数?

c - System V 共享内存权限位 : meaning, 以及如何更改

c++ - 从 std::system 调用执行时,awk 的输出重定向失败

windows - 为什么 %1 很少在 "%1 is not a valid Win32 application."中被替换

c# - 在 Windows 中检测文件 'COPY' 操作

c - 所有者绘制是否仅适用于 ListView 的报告模式?

c++ - 在 Windows 上测量内存分配的一些好工具是什么?

c++ - 在 Windows 10 上显示触摸友好菜单

c# - 在 C# 上使用 CreateFile 返回 isInvalid = true