Возникает "необработанное исключение по адресу 0x00007FFDD353478C" C++

Подскажите, что именно может вызывать ошибку и как ее исправить? Visual Studio пишет, что проблемы не найдены, но возникает исключение

/*if (_Errno_ref == ERANGE || _Ans < INT_MIN || INT_MAX < _Ans) {
    _Xout_of_range("stoi argument out of range");
}*/

//Вывести все k-элементные подмножества мн-ва {1,...,N}
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int x[1000];
void write(vector<int>& vec);
void mod(int n, int k, int i, vector<int>& vec);


int main()
{
    vector<int> v;
    int i = 0, n, k;
    cin >> n >> k;
    //bit(n);
    mod(n, k, i, v);
    write(v);
    return 0;
}

void write(vector<int>& vec) { //если запускать отдельно, то работает
    //ofstream out;
    //const string dig("01");
    for (int i = 0; i < vec.size(); ++i) {
        string pres = "";
        while (vec[i] > 0) {
            pres = to_string(vec[i] % 2) + pres;
            vec[i] /= 2;
        }
        cout << stoi(pres) << " ";
        //out.open("output.txt");
        //out << stoi(pres) << " ";
    }
    
}

void mod(int n, int k, int i, vector<int>& vec) { // работает с целыми числами
    if (i == k) {
        for (int j = 0; j < k; j++) {
            vec.push_back(x[i]);
        }
        cout << endl;
    }
    else {
        for (x[i] = (i > 0 ? x[i - 1] + 1 : 1); x[i] <= n; x[i]++) {
            mod(n, k, i + 1, vec);
        }
    }
}

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

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

Вы вот сюда

    string pres = "";
    while (vec[i] > 0) {
        pres = to_string(vec[i] % 2) + pres;
        vec[i] /= 2;
    }
    cout << stoi(pres) << " ";

приходите с вектором, в котором v[0]==0. Поэтому pres так и остается пустой строкой, и ваши попытки превратить ее в число stoi(pres) проваливаются? и в соответствии с описанием функции

Exceptions
std::invalid_argument if no conversion could be performed

генерируется не перехваченное вами исключение. Программа прекращает работу.

→ Ссылка