Carte SigSeg errore

Ciao a tutti, stavo provando Mazzi di Carte con un vector, ma quando passo il vector alla funzione, le deque che si creano sono vuote, nonostante le abbia riempite in input. Inoltre quando debuggo mi dà un errore in riga 32: “Thread 1 Sigsev, segmentation fault”, che da quanto ho capito è un errore dovuto a un overflow. Qualcuno sa dirmi perchè? Grazie di tutto.

#include<iostream>
#include<vector>
#include<deque>
using namespace std;
#define _ <<" "
#define input for(int i=0; i<N; i++){for(int j=0; j<M; j++)cin>>card[i][j];}

int gioca(int N, int M, vector<deque<int>> &cards)
{
	int conta=0;
	int max;
	for(int i=0; i<N; i++)
	{
		int maxc=cards[i][0];
		for(int j=1; j<cards[i].size(); j++){
			//rimuovo tutte le carte in mezzo al mazzo con valori bassi(in quanto oscurate dai valori precedenti)
			//così mi ritroverò con le carte massime alla fine di ogni mazzo
			if(cards[i][j]<=maxc)
			{
				cards[i].erase(cards[i].begin()+j);
				j--;
			}
			else
				maxc=cards[i][j];
		}
	}
	while(!cards.empty())
	{
		int maxcard=0, pos;
		//prendo il massimo valore delle carte (iterando su ogni deque da dx)
		for(int i=0; i<cards.size(); i++)
		{	
			if(cards[i].back()>maxcard)
			{
				maxcard=cards[i].back();
				pos=i;		
			}
			else if(cards[i].back()==maxcard)	//se trovo una carta = al massimo allora la rimuovo
			{	
				cards[i].pop_back(); 
				if(cards[i].empty())
				{
					cards.erase(cards.begin()+i);
					i--;
				}
			}
		}
		cards[pos].pop_back();
		if(cards[pos].empty())
			cards.erase(cards.begin()+pos);
		conta++;
	}
	return conta;
}	
int main(){
	int N, M; cin>>N>>M;
	vector<deque<int>> card(N);
	input;
	int sol=gioca(N, M, card);
	cout<<sol;
}

Questo problema utilizza il grader, non devi leggere l’input (come ai nazionali).

Okk, ora che ho implementato il grader compila ed esegue correttamente, però prima lo stavo testando in locale, è possibile che ho sbagliato a chiamare la deque nella funzione? Cmq grazie mille.

Si, non puoi leggere in card[i][j] se card[i] (la deque) è vuota.

1 Mi Piace

Ma è questo il problema, infatti io stampando cards[i][j] mi stampava correttamente il numero, ma nel debugging (quando arrivava alla riga int maxc=cards[i][0]) mi faceva vedere che maxc valeva tipo 183020 (cosa che mi esce quando va in overflow…), però stampando cards[i][j] funzionava… Vabbeh, cmq nn è così importante, è solo una curiosità; Grazie