segmentation fault dziwny problem z programem

Odpowiedz Nowy wątek
2010-07-28 20:16

Rejestracja: 10 lat temu

Ostatnio: 7 lat temu

0
#include <iostream>
#include <vector>
using namespace std;
int liczbamiast,drogiwbaj,p1=0,p2=0;
int x=0;
vector <int> bfs1;
typedef vector <int> wektor;

wektor tab [100000];
bool visited[100001];

int main()
{
      cin>>liczbamiast>>drogiwbaj;

    if(drogiwbaj<liczbamiast)cout<<"NIE";
    else{
    int a,b;
    for(int u=0;u<drogiwbaj;u++){

        cin>>a>>b;
        tab[a].push_back(b);
        tab[b].push_back(a);
    }

cout<<"############";
    bfs1.push_back(1);

    while(bfs1.size()!=0&&p1==0){
        int y=0;
        while(y<tab[bfs1[x]].size()&&p1==0){
            if(visited[tab[x][y]]==0){
               visited[tab[x][y]]=1;
               cout<<tab[x][y]<<", ";
               bfs1.push_back(tab[x][y]);
               x++;
            }
            else {p1=bfs1[x],p2=tab[x][y];}
        y++;
cout<<endl;
        }
        cin.get();
    }
cout<<p1<<", "<<p2;
    }
    return 0;
}

wszystko idzie dobrze póki program nie dojdzie do pogrubionego miejsca wtedy właśnie wyświetla się segmentation fault ###### się nie wyświetla mało tego gdy resztę programu zaznaczone jako komentarze to ####### się wyświetli wiec jaki związek ma pozostała cześć programu skoro nie doszedł jeszcze do niego. A wcześniej wszystko się wyświetla przed pętlom jak i po KAŻDYM wykonaniu push_back()
więc proszę was o pomoc

Pozostało 580 znaków

2010-07-28 20:29
Moderator

Rejestracja: 16 lat temu

Ostatnio: 8 godzin temu

0

Ale co to w ogóle jest?
Tworzysz 100000 wektorów, nie przesadzasz aby? Może ci się zwyczajnie kończy stos i stąd problem?
Poza tym odnosisz się do wektora za pomocą operatora[] a czy jesteś pewien że taki indeks w tym wektorze istnieje?


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2010-07-28 21:24

Rejestracja: 10 lat temu

Ostatnio: 7 lat temu

0

nie to nie jest problem robiłem tak milin razy i nic się nie działo nawet teraz to zmieniłem na 10 a dla tego jest tak dużo (100000) bo to akurat było zadanie na olimpiadę . odwoływanie do wektora operator[] tez jest poprawne

Pozostało 580 znaków

kjhkkljlkj
2010-07-28 22:25
kjhkkljlkj
0

Nie powinno być tak?

tab.push_back(b);
tab.push_back(a);

Pozostało 580 znaków

2010-07-28 23:27

Rejestracja: 11 lat temu

Ostatnio: 3 lata temu

0
kjhkkljlkj napisał(a)

Nie powinno być tak?

tab.push_back(b);
tab.push_back(a);

Nie, bo tab jest tablicą wektorów.


Pozostało 580 znaków

2010-07-29 11:22

Rejestracja: 10 lat temu

Ostatnio: 7 lat temu

0

program działa po prostu muszę zamiast używać
vector <int> bfs1;
użyć zwykła tablice ale program nadal pozostaje przynajmniej dla mnie zagadką

Pozostało 580 znaków

2010-08-01 23:11

Rejestracja: 10 lat temu

Ostatnio: 7 lat temu

0

i znowu pojawia się problem banalny program


#include <stdio.h>
using namespace std;

int main()
{
    int n,y,v,w,max,min;
    scanf("%d",n);

    for(int x=0;x<n;x++){

    scanf("%d",y);
    scanf("%d",v);
    max=y+v;
    if(y>v||y==v)
    min=y-v;
    else
    min=v-y;
    w=max-min-1;
    printf("%d",w);
    }

}

i segmentation fault

Pozostało 580 znaków

2010-08-01 23:13
Moderator

Rejestracja: 16 lat temu

Ostatnio: 8 godzin temu

0

Klasyczny błąd ;)
scanf("%d",&n); // i analogicznie w każdym scanfie którego masz
bo przekazujesz tu adres zmiennej do której chcesz coś wpisać ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0