Как решить ошибку «векторный индекс вне диапазона»? - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь узнать о нейронных сетях, использующих C ++, и нашел учебник по распознаванию цифр, но когда я запускаю код, я получаю сообщение об ошибке «Отладочное утверждение не выполнено, векторный индекс выходит за пределы диапазона». Очевидно, проблема в функции loadTraining, но не знаете, как ее изменить, чтобы устранить ошибку.

void loadTraining(const char *filename, vector<vector<double>> &input, vector<vector<double>> &output) 
{
    int trainingSize = 946;
    input.resize(trainingSize);
    output.resize(trainingSize);

    ifstream file(filename);
    if(file) 
    {
        string line;
        int n;
        for (int i=0 ; i<trainingSize ; i++) // load 946 examples
        {
            for (int h=0 ; h<32 ; h++) // 'images' are 32*32 pixels
            {
                getline(file, line);
                for (int w=0 ; w<32 ; w++)
                {
                    input[i].push_back(atoi(line.substr(w,1).c_str()));
                }
            }
            getline(file, line);
            output[i].resize(10); // output is a vector of size 10
            n = atoi(line.substr(0,1).c_str());
            output[i][n] = 1; // set index that represent the number to 1, other are automatically 0 because of the resize()
        }
    }
    file.close();
}

Файл состоит из 32 * 32 массивов двоичных цифр. Это один пример обучения.

Я использую Visual Studio 2013.

1 Ответ

0 голосов
/ 05 июля 2018

Попробуйте использовать std::stoi вместо atoi. Вложите std::stoi в try и catch блок для проверки конверсии. Также проверьте, если n >= 0 && n < 10 для устранения возможных ошибок индекса.

...