Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WriteFile返回错误1784_C++_Winapi_Writefile - Fatal编程技术网

C++ WriteFile返回错误1784

C++ WriteFile返回错误1784,c++,winapi,writefile,C++,Winapi,Writefile,我正在创建一个程序,用虚拟文件系统填充磁盘 目前,我正在使用WriteFile编写大小可变的文件 WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL); err = GetLastError(); err返回#1784,转换为 提供的用户缓冲区对于请求的操作无效。错误\u无效\u用户\u缓冲区 因此,对于前24个文件,写操作有效。对于打开的文件#25,写入操作失败。 文件仍会创建,但WriteFile函

我正在创建一个程序,用虚拟文件系统填充磁盘

目前,我正在使用
WriteFile
编写大小可变的文件

        WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
        err = GetLastError();
err返回#1784,转换为

提供的用户缓冲区对于请求的操作无效。错误\u无效\u用户\u缓冲区

因此,对于前24个文件,写操作有效。对于打开的文件#25,写入操作失败。 文件仍会创建,但WriteFile函数不会填充文件

关于如何通过
错误\u无效\u用户\u缓冲区
有什么想法吗

我所能找到的每一个关于这个错误的参考资料都局限于程序崩溃,我无法找出它与我所经历的问题之间的关系

编辑:

FileData设置并分配到最大缓冲区的大小。
i是循环变量,它会不断迭代,直到递增到最大大小(k)。

我猜
FileData
不够大,您无法从中写入
i*1024
字节。
i
是文件列表的循环控制变量吗?如果是这样的话,在循环文件时,需要写入缓冲区
FileData
一次增加1K

这是一个不寻常的构造。你确定这里的逻辑正确吗?发布更多代码(特别是
FileData
i
的所有用法),以提高答案的准确性


请注意,您不应该总是在此处检查
GetLastError
——您需要先检查
WriteFile
的返回代码,然后才能确定它是否有意义。否则,您可能会从代码的某个不相关部分(无论最后失败的部分)中发现错误。

我得到一个错误=1784,这是因为我打开文件时没有指定记录的大小,然后阻止了对文件的读取

Reset( FileHandle );
应该是

Reset( FileHandle, 1 );

我们如何知道这些参数是什么类型的,以及您以前对它们做了什么?另外,请注意,崩溃通常是UB的结果(UB本身通常试图访问无效内存)。然而,崩溃并不总是UB的结果。可能发生的事情是不可预测的。因此,如果预计不会发生崩溃,请不要对其进行太多读取。每当有太多未完成的异步I/O请求时,WriteFile函数可能会失败,并出现错误\u无效\u用户\u缓冲区或错误\u内存不足。这不是异步I/O,
LPOVERLAPPED
为空。更可能是一个简单的缓冲区误用。也就是说,没有代码就很难起到帮助作用。更新了原始帖子并提供了更多详细信息。同样,当dwwrite为0时,WriteFile在失败时返回0。根据随机代码片段提供准确的建议是不可能的。得到一个最低限度的足够的错误,然后张贴它所有。你的评论上面证明是正确的。缓冲区被重新分配到不正确的大小。
Reset( FileHandle, 1 );