首页 > 解决方案 > 遍历向量缓冲区时的 C++ 非法操作

问题描述

所以我正在编写这个程序来搜索二进制文件中的某个块,我得到了这个我不明白的错误。

这是生成错误的函数的代码
(另请注意,返回值是一个int,因为我希望它首先将大小作为字节返回,看看它是否有效)

int GetChunkBuffer(ifstream &imageFile, char chunkName[4])
{
    //contains the newly opened image as a whole
    vector<unsigned char> imageBuffer(istreambuf_iterator<char>(imageFile), {});

    //pointer "array" type of thing
    vector<unsigned char>::iterator bufferIterator = imageBuffer.begin();

    for(; bufferIterator != imageBuffer.end(); bufferIterator++)
    {
        if(*bufferIterator == chunkName[0])
        {
            //i think this makes the program faster
            if(*(bufferIterator + 1) == chunkName[1] &&
               *(bufferIterator + 2) == chunkName[2] &&
               *(bufferIterator + 3) == chunkName[3])
            {
                //chunk name matches
                //get length of chunk
                unsigned char len[4] = { *(bufferIterator - 4),
                                         *(bufferIterator - 3),
                                         *(bufferIterator - 2),
                                         *(bufferIterator - 1)
                                        };

                unsigned int chunkLength = 0;

                for(int i = 0; i <= 4; i++)
                {
                    chunkLength += len[i] << 1;
                }

                return chunkLength;
            }
        }
    }
}

我打开的文件是 PNG,不确定这是否有任何区别。提前谢谢你的帮助。

标签: c++clangbufferchunkschunking

解决方案


推荐阅读