Возникает "необработанное исключение по адресу 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_argumentif no conversion could be performed
генерируется не перехваченное вами исключение. Программа прекращает работу.