Tajemniczy seg fault ...

0

Witam. Mam pewien problem, otoz napisalem sobie algorytm na dfs'a i nie wiem zupelnie czemu wywala mi segfaulta po cinowaniu wartosci do zmiennej n. Dochodzi do Break3, nastepuje wpisywanie i sie wywala. Moze mialby ktos pomysl dlaczego, bo ja juz powoli nerwy trace...

#include <iostream>
#include <vector>
#include <stack>

using namespace std;


int main (){
	stack <int> sts;
	vector <vector <int> > vec;
	cout<<"Break1";
	int n;
	cout<<"Break2";
	int k;
	cout<<"Break3";
	cin>>n;
	cout<<"Break4";
	cin>>k;
	cout<<"Break5";
	bool tab[n+1];
	for (int i=1; i<=n; i++){
		tab[i]=false;
	}
	for (int i=1; i<=n; i++){
		//vec[a].push_back(b);
	}
	sts.push(1);
	while (!sts.empty()){
		int x = sts.top();
		if (tab[x]==true){
			cout<<"NO";
			return 0;
		}		
		else{
			tab[x]=true;
			for (int i=0; i<vec[x].size(); i++){
				int helpone = vec[x][i];
				if (tab[helpone]==false){
					sts.push(helpone);
				}
				else {
					cout<<"NO";
					return 0;
				}
			}
		}	
	}
	for (int i=1; i<=n; i++){
		if(tab[i]==false){
			cout<<"NO";
			return 0;
		}	
	}
	cout<<"YES";
	return 0;
}
```cpp
1

Bo vec jest puste.

BTW to bool tab[n+1]; jest niepoprawne w C++.

0

Zakomentowalem to poniewaz myslalem ze mi do gory wywala. Powinno to wygladac tak. Teraz niby weszlo w break 4 i break 5. Ale wywali przy wpisywaniu tych a i b, co mialy byc wczesniej.

#include <iostream>
#include <vector>
#include <stack>

using namespace std;


int main (){
	stack <int> sts;
	vector <vector <int> > vec;
	cout<<"Break1";
	int n;
	cout<<"Break2";
	int k;
	cout<<"Break3";
	cin>>n;
	cout<<"Break4";
	cin>>k;
	cout<<"Break5";
	bool tab[n+1];
	for (int i=1; i<=n; i++){
		tab[i]=false;
	}
	int a, b;
	for (int i=1; i<=n; i++){
		cin>>a>>b;
		vec[a].push_back(b);
	}
	sts.push(1);
	while (!sts.empty()){
		int x = sts.top();
		if (tab[x]==true){
			cout<<"NO";
			return 0;
		}		
		else{
			tab[x]=true;
			for (int i=0; i<vec[x].size(); i++){
				int helpone = vec[x][i];
				if (tab[helpone]==false){
					sts.push(helpone);
				}
				else {
					cout<<"NO";
					return 0;
				}
			}
		}	
	}
	for (int i=1; i<=n; i++){
		if(tab[i]==false){
			cout<<"NO";
			return 0;
		}	
	}
	cout<<"YES";
	return 0;
}



do tej pory nie rozumiem co ja tu zle zrobilem

0
vec[a].push_back(b);

Skoro vec jest puste, to jak niby chcesz się odwołać do vec[a]?

0

Rzeczywiscie, teraz to widze. Ale skoro jak nie tak, to jak mam dodawac wartosci do dwuwymiarowego wektora... ;d Sorki, ze tak trywialne pytania zadaje ale dawno c++ nie uzywalem. ;d

0

Ja tam nie wiem co chcesz zrobić, ale żeby to się nie wywalało, wystarczy np.

vector<vector<int>> vec(SIZE);

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