私は非常に奇妙な問題があります。私はUSB経由でPCに接続されたデバイスからデータを読み込むためにReadFile()を使用しています。読み込まれるデータが64バイトのチャンクで受信されると、常にReadFile()が読み込まれるために64バイトで呼び出されます。しかし、64バイト未満のフレームを読み込まなければならないときに、クラッシュが発生することがあります。C++のReadFileクラッシュ
Iは、書かれたコードの例を与えなければならない:
//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)
- デバイスから送信される>ここで、データは、私は64のリードを言う場合でも、従って= 36のみが100から64でありますデータが36バイトを超えるシナリオはありません。したがって、このコードはうまくいくはずです(ただし、私はそれが間違っていることを知っているより少ないメモリを割り当て、メモリ割り当てよりも大きいサイズのReadFileを呼び出す)。
質問:(私たちは、私は読むために必要なデータの正確なサイズが何であるかを知っているが)でしたのReadFile()クラッシュデータを読み込む場合は、メモリの割り当てが行われるよりも多くのバイトを
を行われているPS:そのような種類の理由実装されたコードの設計には小さな欠陥がありました。
非同期モードで開いていますか? ReadFileは、主にファイル(またはデバイス)からデータを同期的に(非同期モードもサポートして)読み込むために使用されます。非同期モードで作業している場合は、ReadFilExを使用することをお勧めします – sarat