Проблема
В вашем коде есть проблема с выделением, так как вы выделяете одно целое число для табуляции. Поэтому, как только вы прочитаете первый номер, вы выходите за пределы. Это неопределенное поведение.
Кроме того, ваш внешний while предназначен для цикла, пока не будет введена пустая строка без чисел.
Решение
Если вы хотите прочитать пару чисел в одной строке, тогда цикл не нужен:
getline(cin, line);
stringstream linestr(line);
vector<int> tab;
while ( linestr >> a )
{
tab.push_back(a);
}
Этот подход использует вектор. Преимущество в том, что вам не нужно знать, сколько цифр у вас будет в итоге. После этого вы можете узнать размер вектора с помощью tab.size()
и получить доступ к отдельным элементам точно так же, как для массива.
Другое решение (неоптимальное)
Если для школы вам запрещено использовать вектор, вы можете выбрать субоптимальную замену:
int *tab = new int[line.size()/2+1];
Это дает оценку максимального числа чисел, которые потенциально могут быть в строке (у вас наверняка будет меньше).