C ++ Недопустимое действие при переборе векторного буфера - PullRequest
0 голосов
/ 24 февраля 2020

Итак, я пишу эту программу для поиска в двоичном файле определенного фрагмента, и я получаю эту ошибку, которую не понимаю.

Вот код функции, которая генерирует ошибку
(также обратите внимание, что возвращаемое значение - 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, а не уверен, если это имеет какое-либо значение. Заранее благодарю за помощь.

...