0

Visual C++ を使用して、ストリームから画像を読み込もうとしています。これは、ストリームをバッファに格納することによって行います。私はバッファ内のどの場所に画像があるかを知っています.それについて)初めて画像を読んだとき、問題なく正しく動作します。コードは次のとおりです-

ReadFromStream(IStream *pStream )
 {//this pStream  stream contents the file contents
        ULONG  cbRead;
        int size=5348928;
        char *buffer = new char[size + 1];
        HRESULT hr = pStream->Read(buffer, size, &cbRead ); //here we store the stream in buffer.Now all the data is in buffer.
        buffer[cbRead ] = L'\0';
        int location = 512 ;
        char FileContents[107643];
        memcpy(FileContents,&buffer[location],SizeOfFile); // here i have the contents of the image in File contents.I am sure about it its location. For the first call to ReadFromStream() function it works fine.
             }

しかし、私の状況では、プログラムの同じ実行でも2回目に画像を読み取らなければなりません。そのため、ReadFromStream() 関数を 2 回目に呼び出すとどうなりますか (同じストリーム値を使用して、デバッグ時にストリーム値を確認できます)、バッファに格納されている画像から遠く離れた場所にある内容が表示されます。それ(つまり、ストリームには最初のファイルとして画像ファイルがありましたが、ReadFromStream()への2番目の呼び出しでは、バッファーは別のファイルのデータを指していますが、最初のファイルは実際には画像ファイルでした)。問題は、このメモリがこの予期しないファイルにどのように割り当てられるかです。

バッファーが開始インデックスから非常に離れた場所にあるデータを表示する理由 (ReadFromStream() への 2 回目の呼び出しでも、画像ファイルを開始ファイルとして表示する必要があります。画像ファイルから離れた場所にあるファイルを表示する理由) ??? ) 私が推測するように、いくつかのメモリが割り当てられており、どれを削除する必要がありますか?? しかし、どこでどのように私は知りません..私は正しいですか??

ReadFromStream(); への 2 回目の呼び出しが原因である可能性があります。このバッファにはすでにいくつかのメモリが割り当てられています。つまり、2番目の呼び出しでは、バッファはゼロから始まらないアドレスを指しています(しかし、私が思うように行う必要があります)

4

1 に答える 1