Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
kinivi
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 5
#1

Ошибка исполнения при записи в vector

13.08.2015, 14:53. Просмотров 361. Ответов 5
Метки нет (Все метки)

Вылетает при воде первой строки. Не пойму почему?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stdlib.h>
 
using namespace std;
 
 
 
 
int main()
{int buf,a;
vector < vector<int> > g; // граф
vector<int> :: iterator it;
int n; // число вершин
 
vector<char> used;
cin>>n;
 
for (int i=0;i<n;i++){
    for (int j=0;j<n;j++){cin>>buf;g[i].push_back(buf);}
 
 
    }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2015, 14:53
Ответы с готовыми решениями:

Ошибка исполнения "vector subscript out of range / debug assertion failed"
Добрый день.. Помогите исправить ошибку.. Вот код: #include &lt;iostream&gt;...

Ошибка исполнения при реализации стека
#include &lt;iostream&gt; using namespace std; struct item {int a; item*p; };...

Ошибка исполнения при заполнении массива
Программа работы с квадратными матрицами. Используются динамические массивы....

Ошибка на этапе исполнения при работе с файлами
Здравствуйте, писал прогу по работе с файлами и структурами, наткнулся на такую...

Ошибка времени исполнения: нарушение прав доступа при чтении
Как исправить. В функции decode вторая строка. Необработанное исключение по...

5
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2015, 14:56 #2
Что значит "вылетает"? Какое-нибудь сообщение выдаёт?
0
kinivi
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 5
13.08.2015, 15:11  [ТС] #3
Винда говорит о прекращении работы.(или зациклилось или памяти не хватает).
Сделал так работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stdlib.h>
 
using namespace std;
 
 
 
 
int main()
{int buf,a;
 
 
int n; // число вершин
 
 
vector<char> used;
cin>>n;
vector < vector<int> > g(n); // граф
 
for (int i=0;i<n;i++){
    for (int j=0;j<n;j++){cin>>buf;g[i].push_back(buf);}
 
 
    }
  return 0;
}
но все-же интересно почему вылетало?

Добавлено через 11 минут
Добавил DFS и теперь опять так же . (Виндовс пишет о прекращении работы)ж
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stdlib.h>
 
using namespace std;
 
 
 
vector<char> used;
int sum=0;
void dfs (int v, vector < vector<int> > g ) {
    used[v] = true;
    sum++;
    for (vector<int>::iterator i=g[v].begin(); i!=g[v].end(); ++i)
        if (!used[*i] && g[v][*i]!=0)
            dfs (*i,g);
}
 
 
int main()
{int buf,a;
 
 
int n; // число вершин
 
vector<char> used;
cin>>n>>a;
vector < vector<int> > r(n); // граф
 
for (int i=0;i<n;i++){
    for (int j=0;j<n;j++){cin>>buf;r[i].push_back(buf);}
 
 
    }
dfs(a,r);
cout<<sum;
 
 
  return 0;
}
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2015, 15:14 #4
C++
1
vector < vector<int> > g(n); // параметр конструктора
В первом варианте у тебя создавался вектор с одним элементом (строкой), поэтому при переходе на ввод второй - обращение к неинициализированному элементу. Во втором варианте ты передаёшь в конструктор вектора начальное число элементов.

Можно было сделать так:
C++
1
2
3
4
5
6
vector < vector<int> > g; // граф
for (int i=0;i<n;i++)
{
    for (int j=0;j<n;j++){cin>>buf;g[i].push_back(buf);}
    g.push_back(vector<int>());
}
0
kinivi
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 5
13.08.2015, 15:39  [ТС] #5
Неа не помогло все таже ошибка. поробовал сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stdlib.h>
 
using namespace std;
 
 
vector < vector<int> > g; // граф
int n; // число вершин
 
vector<char> used;
 
void dfs (int v) {
    used[v] = true;
    for (vector<int>::iterator i=g[v].begin(); i!=g[v].end(); ++i)
        if (!used[*i] && g[v][*i]!=0)
            dfs (*i);
}
 
 
int main()
{int buf,a;
cin>>n>>a;
g.resize(n);
for (int i=0;i<n;i++)
{g[i].resize(n);}
for (int i=0;i<n;i++)
{
    for (int j=0;j<n;j++){cin>>buf;g[i].push_back(buf);}
    g.push_back(vector<int>());
}
dfs(a);
 
 
  return 0;
}
Но теперь что-то с DFS(вылетает уже на ней)

Добавлено через 13 минут
Все нашел ошибку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stdlib.h>
 
using namespace std;
 
 
vector < vector<int> > g; // граф
int n; // число вершин
int sum=0;
vector<bool> used;
 
void dfs (int v) {
    used[v] = true;
    sum++;
    for (vector<int>::iterator i=g[v].begin(); i!=g[v].end(); ++i)
        if (used[*i]==false )
            dfs (*i);
}
 
 
int main()
{int buf,a;
cin>>n>>a;
g.resize(n);
for (int i=0;i<n;i++)
{g[i].resize(n);}
for (int i=0;i<n;i++)
{
    for (int j=0;j<n;j++){cin>>buf;g[i].push_back(buf);}
 
}
 for(int i=0; i<n; i++)
            used.push_back(false);
 
dfs(a);
cout<<sum;
 
  return 0;
}
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2015, 15:41 #6
Цитата Сообщение от kinivi Посмотреть сообщение
Неа не помогло все таже ошибка. поробовал сделать так
Ну что значит не помогло, когда ты сделал совсем по-другому?
Разницу видишь?
C++
1
2
vector < vector<int> > g(n); // так
vector < vector<int> > g; // или так
В первом случае в g уже будет n векторов (строк). Во втором - пустой вектор.

Добавлено через 1 минуту
Хотя, прошу пардона, я ошибся (копипаст подвёл)
C++
1
2
3
4
5
for (int i=0;i<n;i++)
{
    g.push_back(vector<int>()); // сначала вставить, потом заполнять
    for (int j=0;j<n;j++){cin>>buf;g[i].push_back(buf);}
}
0
13.08.2015, 15:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2015, 15:41

Ошибка времени исполнения при вводе букв вместо числа
Доброго времени суток. Помогите пожалуйста. При запуске кода, открывается...

Ошибка этапа исполнения при преобразовании символов в верхний регистр
Доброго времени суток, уважаемые пользователи CyberForum.ru! По какой то...

Ошибка при использовании vector (в конце, после вывода результатов выскакивает ошибка, но сам результат коректен)
Суть в следующем, мы считываем введеные значения и выводим этот массив ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru