使用 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.
}
但我的情况是我必须在程序的同一执行中第二次读取图像。所以当我第二次调用 ReadFromStream() 函数时会发生什么(在调试流值时我可以看到相同的流值是相同的。)即使这样缓冲区显示的内容远离存储在图像中的位置它(我的意思是流将图像文件作为第一个文件,但在第二次调用 ReadFromStream() 时,缓冲区指向另一个文件的数据,但第一个文件实际上是图像文件)。所以问题是这个内存是如何分配给这个意想不到的文件的?
为什么缓冲区显示距离起始索引很远的位置的数据。(对于第二次调用 ReadFromStream() 也应该将图像文件显示为起始文件。为什么它显示远离图像文件的文件??? ) 我猜有些内存已分配,哪些必须删除??但我不知道在哪里以及如何......我是对的吗?
可能是因为在第二次调用 ReadFromStream(); 这个缓冲区已经分配了一些内存,我的意思是第二次调用缓冲区指向的地址不是从零开始的(但它应该按照我的想法去做)