c++ - Writefile 导致崩溃,访问冲突

标签 c++ file-io access-violation

所以基本上我希望将一个字节数组写入一个文件,但是程序崩溃了。 append.exe 中 0x7766DEE1 (KernelBase.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000000。

BYTE *image ;
BYTE *bigMem;
#define REASONABLY_LARGE_BUFFER 16777216
file = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

fileSize = GetFileSize(file, NULL);

bigMem = (BYTE *)HeapCreate(NULL, REASONABLY_LARGE_BUFFER, 0);
image = (BYTE *)HeapAlloc(bigMem, HEAP_ZERO_MEMORY, fileSize);
if (bigMem == NULL || image == NULL){
    printf("Allocation failed");
    return EXIT_FAILURE;
}
printf("We are writing to the file %p, with data location %p, and filesize %d\n", file, image, fileSize);
LPDWORD at = 0;
WriteFile(file, image, fileSize, at, NULL);

那个打印品说: 我们正在写入文件 00000038,数据位置为 02451590,文件大小为 161169

最佳答案

传递给 WriteFile 的参数用于存储写入的字节数 (at) 如果重叠结构的参数为空,则可以为空。我建议将 at 更改为 DWORD 并将指针传递给它。

DWORD at;
WriteFile(file, image, fileSize, &at, NULL);

关于c++ - Writefile 导致崩溃,访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130532/

相关文章:

c++ - 当我的变量肯定被使用时未使用的变量错误

java - 我有一个程序应该将一些数据写入文件,但它没有,我不知道为什么

.net - 来自非托管代码的 System.AccessViolationException?

c++ - 防止其他线程读取资源

c++ - 处理 vector - cudaMemcpyDeviceToHost

java - FreeMarker 可以将目录内容写入模板吗?

c++ - 使用二进制文件访问违规读取位置

forms - 当 Form2 尝试编辑 delphi 中的 form1 时,访问冲突

c++ - unsigned 关键字的放置

c++ - native C++ 和 Windows 平板电脑