Segmentation fault

di Anonimizzato18102 il
4 risposte
Ciao a tutti, ho scritto questo codice dove calcola il numero massimo di combinazioni delle 8 regine, solo che mi da errore di segmentazione, dove ho sbagliato.
DDD mi da un errore sulla funzione verifica, ma non riesco a capire.
#include <stdio.h>

int board[8][8] = {{0}};
int verifica(int,int);
int clear(int);
int queen(int, int, int);

int main() {

	printf("%d\n", queen(0, 0, 0));

	return 0;
}

int queen( int riga, int col, int WINS) {

	if (riga == 0 && col > 7)
	 return WINS;
	else {
		for (int i = col; i < 8; i += 1) {
			if(verifica( riga, i)){
				board[riga][i] = 1;
				if(riga == 7) {
					++WINS;
					break;
				}
				queen(++riga, 0, WINS);
			}
		}
		--riga;
		queen (riga, clear(riga), WINS);
	}
}

int verifica( int X, int Y) {

	for (int i = 0; i <= X; i += 1) {
		if (board[X - i][Y])
			 return 0;
		if(Y - i >= 0 && board[X - i][Y - i])
			 return 0;
		if(Y + i <= 7 && board[X - i][Y + i])
			 return 0;
	}
	return 1;
}

int clear( int row) {

	for (int i = 0; i < 8; i += 1) {
		if (board[row][i]) {
			board[row][i] = 0;
			return i + 1;
		}
	}
	return 0;
}

4 Risposte

  • Mi scuso, e solo che mi serve urgente
  • Lo so che è una str****ta, ma sono all'inizio nel programmare.
    Nessuno può aiutarmi???
  • Da una prova veloce, posso dirti che l'errore che si manifesta in effetti è uno

    stack overflow

    ed evidentemente perché la funzione ricorsiva viene chiamata "all'infinito" senza terminare mai.
Devi accedere o registrarti per scrivere nel forum
4 risposte