получение ошибки сегментации (дамп ядра) после ввода всех значений вектора в c ++ - PullRequest
0 голосов
/ 17 февраля 2020

Я сделал этот код для печати строки и Int.

 vector<int> nu;

for(int v;cin>>v;)
    nu.push_back(v);

vector<string> la;
for(string c;cin>>c;)
    la.push_back(c);

программа запускается и начинает принимать значение, но когда я ставлю что-либо кроме int, чтобы остановить часть

for(int v;cin>>v;)

, я получаю сегментацию. Все переменные определены локально, поэтому я делаю Не понимаю, почему я получаю эту ошибку.

РЕДАКТИРОВАТЬ: для печати я создал функцию

void print(vector<string> a,vector<int> b)
{int y=0;
y= b.size();
for(int i=0;i<y;i++)
    {cout<<a[i]<<" "<<b[i]<<"\n";
     }

}

Ответы [ 3 ]

1 голос
/ 17 февраля 2020

В l oop

for(int i=0;i<y;i++) {
    cout<<a[i]<<" "<<b[i]<<"\n";
}

, если один из индексов равен out_of _range, будет брошено out_of_range exception, ведьма обязательно произойдет, так как вы используете размер vector b для печати vector a, поскольку вы не перехватываете это исключение, программа создаст sh.

Используйте циклы foreach, чтобы избежать этого:

Используйте foreach l oop чтобы избежать этого, например:

vector<int> a;
for(int i : a){
  cout << a;
}
1 голос
/ 17 февраля 2020

Вы не должны получать доступ к векторам, пока не проверили их размер. Вы проверяете только вектор b, но также получаете доступ к вектору a, который, вероятно, пуст, потому что ввод не удался (потому что вы не очистили поток после того, как ввели что-то, что не может быть проанализировано как целое, поэтому второй вход l oop никогда не вводился).

0 голосов
/ 17 февраля 2020

Вы также можете попробовать это, если это подходит:

void print(vector<string> a,vector<int> b)
{int y=0;
y= b.size();

int x = a.size();

// min(x,y) is the minimum of x and y values
for(int i=0;i< min(x,y);i++)
    {cout<<a[i]<<" "<<b[i]<<"\n";
     }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...