2011-04-26 49 views
2

我试图从二进制文件读取一些数据到VirtualAlloc分配的缓冲区。 问题是我得到一个“不良Pr”问题,无法执行fread。 这里是我的代码:VirtualAlloc问题为读取批量文件分配内存

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); 

fread - 失败。 我做错了什么?

谢谢!

+1

什么错误代码,它会失败? – James 2011-04-26 21:55:05

+0

检查所有返回值,同时检查GetLastError。 – 2011-04-27 15:33:42

回答

2

您需要通过MEM_RESERVEMEM_COMMIT。你需要使用一个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); 
+0

谢谢 - 这个伎俩! – aaaa 2011-04-26 21:58:12

+0

@aaaa然后标记此答案为正确的。 – geocar 2011-06-08 10:36:20