我正在创建一个程序来填充具有虚拟文件系统的磁盘。WriteFile返回错误1784
目前,我正在使用WriteFile
编写可变大小的文件。
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();
ERR返回#1784翻译为
所提供的用户缓冲区是无效的请求的操作。 ERROR_INVALID_USER_BUFFER
因此,对于前24个文件,写入操作起作用。对于文件#25,写入操作失败。 文件仍然被创建,但WriteFile函数不会填充文件。
关于如何过去ERROR_INVALID_USER_BUFFER
的任何想法?
我发现的错误的每个参考仅限于崩溃的程序,我无法弄清它与我遇到的问题之间的关系。
编辑:
FileData = (char *) malloc(sizeof(char) * (size_t)k * 1024);
memset(FileData, 245, sizeof(char) * (size_t)k * 1024);
的FileData被设置和分配给最大的大小预测缓冲区。 我是迭代的循环变量,直到它增加到最大大小(k)。
我们怎么知道这些参数是什么类型,以及您与他们以前做了什么? –
此外,请注意,崩溃通常是UB(其本身通常尝试访问无效内存)的结果。然而,碰撞不是UB的结果。关于可能发生的事情,这是不可预测的。所以,如果你期望没有发生崩溃,不要太多地阅读它。 –
每当有太多未完成的异步I/O请求时,WriteFile函数可能会因ERROR_INVALID_USER_BUFFER或ERROR_NOT_ENOUGH_MEMORY而失败。 –