Отладочная ошибка -Abort () был вызван

Я пытаюсь ввести число n и получить наименее супер счастливое число, которое больше или равно n.
Супер везение: его десятичное представление содержит одинаковое количество цифр 4 и 7. Например, числа 47, 7744, 474477 — супер везение, а 4, 744, 467 — нет.

Вот мой код

     #include<iostream>
#include<string>
using namespace std;

void superLucky(int n,string s, int count4, int count7)
{
if (s.size() > 10)
return;
if (( stoi(s) >= n ) && (count4 == count7) && (count4+count7)!=0)
{
cout << s << endl;
return;
}

superLucky(n, s + '4', count4+1, count7);
superLucky(n, s + '7',count4,count7+1);
}

int main()
{
int n;
cin >> n;
superLucky(n, "", 0, 0);
return 0;
}

После ввода целого числа я получаю отладочную ошибку R6010 — вызвана abort (). Что это значит ? и как я могу это исправить?

9

Решение

Есть пара вопросов:

  1. Когда вы звоните superLucky от main, s пустой. stoi(s) выдает исключение, когда s пустой.

  2. Чек s.size() > 10 не крепкий Это зависит от платформы. Вы можете использовать try/catch блок, чтобы иметь дело с этим вместо жесткого кодирования размера.

Вот более надежная версия функции.

void superLucky(int n,string s, int count4, int count7)
{
int d = 0;
if ( s.size() > 0 )
{
try
{
d = stoi(s);
}
catch (...)
{
return;
}

if (( d >= n ) && (count4 == count7) && (count4+count7)!=0)
{
cout << s << endl;
return;
}
}

superLucky(n, s + '7',count4,count7+1);
superLucky(n, s + '4', count4+1, count7);
}
5

Другие решения

Это наверное потому что stoi() бросили invalid_argument исключение.

1

По первому звонку superLucky, вы передаете пустую строку std::stoi, Когда не удается выполнить преобразование, stoi бросает исключение. Это исключение не пойман, поэтому uncaught_exception вызывается, что в свою очередь вызывает abort

0
По вопросам рекламы [email protected]