Не работает stoi в Xcode C++

Подскажите пожалуйста почему Xcode на маке ругается на stoi?

Пишет следующее:

Thread 1: signal SIGABRT libc++abi: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion terminating with uncaught exception of type std::invalid_argument: stoi: no conversion (lldb)

void Read(vector<Car>& cars, vector<Bike>& bikes)
{
    string s1, s2, s3, s4, s5, s6;
    ifstream file("transports.csv");
    for (int i = 0; i < 3; i++)
    {
        getline(file, s1, ';');
        getline(file, s2, ';');
        getline(file, s3, ';');
        getline(file, s4, ';');
        getline(file, s5, ';');
        getline(file, s6);
        cars.push_back(Car(s1, stoi(s2), stoi(s3), stoi(s4), stoi(s5), s6));
    }
    for (int i = 0; i < 3; i++)
    {
        getline(file, s1, ';');
        getline(file, s2, ';');
        getline(file, s3, ';');
        getline(file, s4, ';');
        getline(file, s5);
        bikes.push_back(Bike(s1, stoi(s2), stoi(s3), stoi(s4), s5));
    }
    file.close();
}

Ответы (1 шт):

Автор решения: Antares

Как и написал в комментариях к вопросу, решил написать свой конвертер из string в int.
И вот что у меня получилось:

int toInt(string str)
{
    int count = 0, value = 0;
    bool check = false, err = false;        
    for (int i = 0; i < str.length(); i++)
    {
        if (!isdigit(str[i])) err = true;
    }
    if (err == false)
    {
        int* arr = new int[str.length()];
        for (int i = 0; i < str.length(); i++)
        {
            arr[i] = (int)str[i] - 48;
        }
        int modif = arr[str.length()-1];
        for (int i = str.length() - 1; i >= 0; i--)
        {   
            modif = arr[i] * count;
            if (check == false) modif = arr[i];
            value = value + modif;
            if (check == false) count = 10;
            else count *= 10;
            check = true;
        }
        delete[]arr;
        return value;
    }
    else cout << "Ошибка! toInt принимает только строки с целочисленными значениями" << endl;
    return 0;
}

Как ни странно это работает, однако есть зелененькое предупреждение C6386: Переполнение буфера при записи в "arr"... Не знаю может ли мне где-то это потом вылезти боком, пока что не сильно понимаю в работе памяти. Если кто шарит подскажите пожалуйста есть ли риски в работе с такой функцией и если да, то как поправить это предупреждение?

→ Ссылка