Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Vector subscript out of range - Visual C++ ?


Автор: BlackMesa 28.3.2018, 14:14
Осталась одна ошибка (ошибка вылетает только на других компах, на компютере где происходит компиляция данной ошибки нет):
vector subscript out of range
скрин в атаче 

вектор используется только при загрузке файла (добавляем строки в вектор push_back) в процедуре поиска
Код

vector<string> signBase; //(MAX_PATH);


Код

bool scanSig(string path, int signCount)
{
    InitConsole();
    FILE *in1 = fopen(path.c_str(), "rb");
    if (!in1) cout << "Couldn't open file";
    for (int wsignCount = 0; wsignCount < signCount; wsignCount++)
    {
        //Convert string vector to int
        istringstream iss(signBase[wsignCount]);
        vector<string> results(istream_iterator<string>{iss},
            istream_iterator<string>());
        reverse(results.begin(), results.end());
        vector <int> signInt(results.size());
        //cout << "check: " << signBase[wsignCount] << endl;
        int resultsSize = results.size();
 
        for (int i = 0; i < results.size(); i++)
        {
            stringstream ss;
            ss << hex << results[i];
            int x;
            ss >> x;
            signInt[i] = x;
        }
 
        //unsigned char buf[26000];
        unsigned char buf[MAX_PATH];        
        int z = 0;
        size_t count;
        //while (count = fread(buf, sizeof(buf[0]), 26000, in1)) {
        while (count = fread(buf, sizeof(buf[0]), MAX_PATH, in1)) {
            int i;
            for (i = 0; i < count; ++i) {
 
                if ((int)buf[i] == signInt[0])
                {
                    for (z = 1; z < resultsSize; z++)
                    {
                        if (buf[i - z] != signInt[z]) break;
                    }
                    if (z == resultsSize)
                    {
                        detectedSignature = signBase[wsignCount];
                        detectedPath = path;
                        botFound = true;
                        cout << "Detected: " << path << endl << signBase[wsignCount]  << endl;
                    }
                }
                sleepCount++;
                if (sleepCount == 3000)
                {
                Sleep(6);
                sleepCount = 0;
                }
            }
        }
 
 
    }
    fclose(in1);
    return 0;                       
}

подскажите где может быть проблема

Автор: xvr 28.3.2018, 18:05
Сообщение читать не пробовали? Оно же чистым английским языком пишет, что вы где то попытались обратится за пределы vector<>, и просит нажать кнопку 'Повторить', что бы он мог вам показать где именно.

Автор: Namira 29.3.2018, 13:15
Цитата(BlackMesa @  28.3.2018,  14:14 Найти цитируемый пост)
добавляем строки в вектор push_back

В твоем коде и не пахнет push_back'ом. И если бы ты действительно добавлял строки пушбэком, то не получил бы ту ошибку, которую получил. Перечитай свой код хотя бы, у тебя там явно обращение к элементу вектора, который не существует. И вообще для копирования потока в вектор используй std::copy, а не то, что ты написал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)