Вот фрагмент кода или, скорее, функция, которая берет две строки в качестве входов, которые являются в основном большими целыми числами и печатает их сумму. Я правильно печатаю сумму, но в конце возникает ошибка сегментации, и я не могу понять ее источник.Ошибка сегментации с добавлением двух больших чисел, представленных в виде строк
string sum(string x, string y) {
bool carry = false;
int yLen = y.length(), xLen = x.length();
vector<char> s;
for(int i = xLen - 1, j = yLen - 1; i >= 0, j >= 0; i--, j--) {
int a = x[i] - '0', b = y[j] - '0';
int c = (carry?(a+b+1):(a+b));
if(c/10) carry = true, c %= 10;
else carry = false;
s.push_back(c + '0');
}
for(int i = xLen - yLen - 1; i >= 0; i--) {
int a = x[i] - '0';
int c = (carry?(a+1):(a));
if(c/10) carry = true, c %= 10;
else carry = false;
s.push_back(c + '0');
}
reverse(s.begin(), s.end());
for(vector<char>::iterator i = s.begin(); i != s.end(); i++) cout<<*i;
cout<<endl;
}
Обновление: Предположим, что x.length() всегда больше или равна y.length() в самом входе.
Вы пробовали работать в отладчике? –
@JoachimPileborg Нет, но я использовал несколько операторов печати в исходном исходном коде в моей системе. Еще нет подсказки! – Sunny
Попробуйте запустить его в отладчике. Он точно остановится там, где произошел сбой, а затем вы можете показать и подобрать стек вызовов функций к вашему коду (если его там еще нет), где вы можете проверить значения переменных. Не уверен, что проблема в том, что на самом деле проблема в коде, который вы показываете. –