gpt4 book ai didi

c++ - C++ 中的 ReadFile 崩溃

转载 作者:行者123 更新时间:2023-11-28 08:19:22 25 4
gpt4 key购买 nike

我有一个很奇怪的问题。我一直在使用 ReadFile() 从通过 USB 连接到 PC 的设备读取数据。由于要读取的数据以 64 字节的 block 形式接收,因此始终调用 ReadFile() 以读取 64 字节。但是,当我必须读取小于 64 字节的帧时,偶尔会发生崩溃。

我将给出一个编写代码的例子:

//Memory allocation done to read 100 bytes from device - This value is known in prior and hence memory is allocated exactly
new(100bytes);
// First read of 64 bytes
ReadFile(64)
// Second read of 64 bytes
ReadFile(64)

-> 这里从设备发送的数据只有 100-64 = 36。因此,即使我说读取 64 字节,也不会有数据大于 36 字节的情况。因此,这段代码应该可以工作(尽管我知道分配更少的内存并调用 ReadFile 以获得大于内存分配的大小是不正确的)。

问题:如果数据读取完成的字节数多于内存分配完成的字节数,ReadFile() 可能会崩溃(尽管我们知道我需要读取的数据的确切大小是多少)

PS:这种实现的原因是所开发代码设计中的一个小缺陷。

最佳答案

完全有可能。不要对 API 撒谎,您不知道它们是如何工作的,或者如果您知道它们会发生变化。这是重点的一部分。您没有说它是如何崩溃的,但也许是访问冲突。我不确定为什么,但我可以推测一种可能性。也许 ReadFile 读入一个(或多个)中间缓冲区而不是直接读入您的缓冲区(这样做的原因有很多),然后在可能的情况下将 dword 大小的拷贝放回您的缓冲区。它仍然会返回读取的正确字节数,但最终可能会将一些“额外”复制到您的缓冲区中。只要您已将缓冲区的正确大小告知 ReadFile,就可以了。

说实话。

关于c++ - C++ 中的 ReadFile 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com