Я пишу программу, которая разбивает любые два числа. Проблема заключается в том, когда я запускаю программу, я получаю ошибку, которая говорит:Получение «./a.out» завершено сигналом SIGSEGV (ошибка границы адреса)
«./a.out» останавливал сигнал SIGSEGV (ошибку краевого адреса)
И эта ошибка происходит на линиях :
a = std::stoi(temp_vec.front());
b = std::stoi(temp_vec.back());
и
c = std::stoi(temp_vec.front());
d = std::stoi(temp_vec.back());
Вот моя программа:
#include <iostream>
#include <string>
#include <vector>
void split_number(std::vector<std::string> vect, int x);
int main()
{
int x = 0, y = 0, a = 0, b = 0, c = 0, d = 0;
std::vector<std::string> temp_vec;
std::cout << "Enter x: ";
std::cin >> x;
std::cout << "Enter y: ";
std::cin >> y;
split_number(temp_vec, x);
a = std::stoi(temp_vec.front());
b = std::stoi(temp_vec.back());
split_number(temp_vec, y);
c = std::stoi(temp_vec.front());
d = std::stoi(temp_vec.back());
return 0;
}
void split_number(std::vector<std::string> vect, int x)
{
vect.clear();
//1. convert x to string
std::string temp_str = std::to_string(x);
//2. calculate length
std::size_t len = temp_str.length();
std::size_t delm = 0;
if(len % 2 == 0) {
delm = len/2;
} else {
delm = (len + 1)/2;
}
//3. populate vector
vect.push_back(temp_str.substr(0, delm));
vect.push_back(temp_str.substr(delm + 1));
}
Любая помощь будет оценена по достоинству.