Форум программистов, компьютерный форум CyberForum.ru

Ошибка Сегментации - C++

Восстановить пароль Регистрация
 
Rolion
 Аватар для Rolion
14 / 14 / 3
Регистрация: 04.01.2011
Сообщений: 195
07.11.2011, 19:55     Ошибка Сегментации #1
Всем привет! При выполнении кода вылетает ошибка: "Ваша программа вызвала нарушение доступа(ошибку сегментации)". Как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2011, 19:55     Ошибка Сегментации
Посмотрите здесь:

Ошибка сегментации C++
Непонятная ошибка сегментации C++
C++ ошибка сегментации
C++ Ошибка сегментации.
Ошибка сегментации C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.11.2011, 19:59     Ошибка Сегментации #2
Rolion, А код? Или гадать?

Если гадать то ответ будет такой: исправить ошибку сегментации. Ваш КО.
Rolion
 Аватар для Rolion
14 / 14 / 3
Регистрация: 04.01.2011
Сообщений: 195
07.11.2011, 20:02  [ТС]     Ошибка Сегментации #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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<iostream>
#include<vector>
#define pb push_back
using namespace std;
 
vector<vector<int> > H(10000);
 
void Delk(int);
 
int main()
{
    int sum=0,n,i;
    cin >> n;
    for(i=1; i<=n; i++)
    {
        H[i].pb(0);
        H[i].pb(0);
        H[i].pb(0);
    }
    for(i=1; i<=n; ++i)
    {
        cin >> H[i][2];
        H[i][1]=i;
        H[H[i][2]].push_back(i);
        ++H[H[i][2]][3];
    }
    for (i=1; i<=n; ++i)
    {
        if (H[i][1]!=0)
        {
            Delk(i);
            ++sum;
        }
    }
    cout << sum;
    return 0;    
}
 
void Delk(int a)
{
     H[a][1]=0;
     Delk(H[a][2]);
     for (int t=1; t<=H[a][3]; ++t) Delk(H[a][3+t]);
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.11.2011, 20:04     Ошибка Сегментации #4
C++
1
2
3
        H[i].pb(0);
        H[i].pb(0);
        H[i].pb(0);
Чего чего?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
void Delk(int a)
{
     H[a][1]=0;
     Delk(H[a][2]);
     for (int t=1; t<=H[a][3]; ++t) Delk(H[a][3+t]);
}
Привет бесконечной рекурсии.
Rolion
 Аватар для Rolion
14 / 14 / 3
Регистрация: 04.01.2011
Сообщений: 195
07.11.2011, 20:05  [ТС]     Ошибка Сегментации #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
44
45
#include<iostream>
#include<vector>
#define pb push_back
using namespace std;
 
vector<vector<int> > H(10000);
 
void Delk(int);
 
int main()
{
    int sum=0,n,i;
    cin >> n;
    for(i=1; i<=n; i++)
    {
        H[i].pb(0);
        H[i].pb(0);
        H[i].pb(0);
    }
    for(i=1; i<=n; ++i)
    {
        cin >> H[i][2];
        H[i][1]=i;
        H[H[i][2]].push_back(i);
        ++H[H[i][2]][3];
    }
    for (i=1; i<=n; ++i)
    {
        if (H[i][1]!=0)
        {
            Delk(i);
            ++sum;
        }
    }
    cout << sum;
    cin >> H[1][1];
    return 0;    
}
 
void Delk(int a)
{
     H[a][1]=0;
     Delk(H[a][2]);
     for (int t=1; t<=H[a][3]; ++t) if (H[H[a][3+t]][1]!=0) Delk(H[a][3+t]);
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.11.2011, 20:07     Ошибка Сегментации #6
Rolion, Код ничем не отличается от первого.

У вас бесконечная рекурсия в функции. Конкретно - вторая строка функции Delk.
Rolion
 Аватар для Rolion
14 / 14 / 3
Регистрация: 04.01.2011
Сообщений: 195
07.11.2011, 20:18  [ТС]     Ошибка Сегментации #7
Понятно

Добавлено через 2 минуты
Ладно, я и это исправил:
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
44
45
46
47
48
49
#include<iostream>
#include<vector>
#include<conio.h>
#define pb push_back
 
using namespace std;
 
vector<vector<int> > H(10000);
 
void Delk(int);
 
int main()
{
    int sum=0,n,i;
    cin >> n;
    for(i=1; i<=n; i++)
    {
        H[i].pb(0);
        H[i].pb(0);
        H[i].pb(0);
    }
    for(i=1; i<=n; ++i)
    {
        cin >> H[i][2];
        H[i][1]=i;
        H[H[i][2]].push_back(i);
        ++H[H[i][2]][3];
    }
    for (i=1; i<=n; ++i)
    {
        if (H[i][1]!=0)
        {
            Delk(i);
            ++sum;
        }
    }
    cout << sum;
    _getch();
    return 0;    
}
 
void Delk(int a)
{
     H[a][1]=0;
     if (H[H[a][2]][1]!=0) Delk(H[a][2]);
     for (int t=1; t<=H[a][3]; ++t) 
         if (H[H[a][3+t]][1]!=0) 
             Delk(H[a][3+t]);
}
Но и всё равно. Системная ошибка
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.11.2011, 20:24     Ошибка Сегментации #8
Rolion, Почитайте документацию по вектору.
C++
1
vector<vector<int> > H(10000);
Создали вектор из 10000 пустых векторов.
C++
1
H[i].pb(0);
У вектора нет члена pb.

Вообще не должно бы компилироваться.
Rolion
 Аватар для Rolion
14 / 14 / 3
Регистрация: 04.01.2011
Сообщений: 195
07.11.2011, 20:39  [ТС]     Ошибка Сегментации #9
pb -- это push_back, написано:
C++
1
#define pb push_back
Так что с этим всё в порядке, наверно
Bers
Заблокирован
07.11.2011, 20:41     Ошибка Сегментации #10
Цитата Сообщение от Rolion Посмотреть сообщение
pb -- это push_back, написано:
Код C++
1
#define pb push_back
Так что с этим всё в порядке, наверно

гм... ну вы и извращенцы. Сами себе ноги хотите отстрелить?
Rolion
 Аватар для Rolion
14 / 14 / 3
Регистрация: 04.01.2011
Сообщений: 195
08.11.2011, 18:01  [ТС]     Ошибка Сегментации #11
Цитата Сообщение от Bers Посмотреть сообщение
гм... ну вы и извращенцы. Сами себе ноги хотите отстрелить?
Ну почему же?
Ладно, я исправил и это. Такая же ошибка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 03:59     Ошибка Сегментации
Еще ссылки по теме:

C++ ошибка сегментации
C++ Ошибка сегментации
Непонятная ошибка сегментации C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.11.2011, 03:59     Ошибка Сегментации #12
элементы вектора индексируются с 0 до n - 1
Yandex
Объявления
09.11.2011, 03:59     Ошибка Сегментации
Ответ Создать тему
Опции темы

Текущее время: 16:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru