Blocco durante eseguzione del programma

di il
1 risposte

Blocco durante eseguzione del programma

Eseguo il programma, e appena voglio eseguire la stampa, salta completamente il passaggio, e non stampa la lista delle mosse senza dare alcun errore...
quale potrebbe essere il problema....

struct nodo_Storia
{
	char Da_c;
	char Da_r;
	char A_c;
	char A_r;
	int cat;
	char l;
	struct nodo_Storia *next;
};

void inserisci_storia (struct nodo_Storia* head,char da_c,char da_r, char a_c, char a_r, int c, char let){
    
	struct nodo_Storia* s=head;
    	
    	//alloco il nuovo nodo
    	struct nodo_Storia* new_head;
    	new_head = (struct nodo_Storia*)malloc(sizeof(struct nodo_Storia));
	strcpy(&new_head->Da_c,&da_c);
	strcpy(&new_head->Da_r,&da_r);
	strcpy(&new_head->A_c,&a_c);
	strcpy(&new_head->A_r,&a_r);
    	new_head->cat = c;
    	strcpy(&new_head->l,&let);
    	//lui diventa il primo nodo e quindi deve puntare all'attuale testa
    	new_head->next = NULL;
    	//se la lista e' vuota lui sara' anche il primo quindi la testa deve puntare a lui
    	if(s==NULL){  
        	s=new_head;
            }
    	 while (s->next != NULL)
        	s = s->next;

    	s->next = new_head;
    	
}

//stampa la lista
void stampa(struct nodo_Storia* head){
    //posso usare head per scorrere la lista perche' e' una copia
    //scorro fino alla fine e stampo
    while ((head != NULL)){
    if(head->cat==0)
        printf("%c%c%dx%c%d ", head->l,head->Da_c,head->Da_r,head->A_c,head->A_r);
    else printf("%c%c%d-%c%d ", head->l,head->Da_c,head->Da_r,head->A_c,head->A_r);
        head = head->next;
    }
    printf("\n");
}

int main(int argc, char **argv) {
		
	char Command[256];	/* riga di comando */
	char da_c, da_r, a_c, a_r;
	struct nodo_Storia* Crono=NULL;


	printf("\n");

	for(;;) {
	
		/* prende l'input da consolle */
		printf("sc> ");
		
		
		
		if (scanf("%s", Command) == EOF)
			return 0;


		if (!strcmp(Command, "exit")) {
			printf("sc> Ciao!\n");
			stampa(Crono);
			svuota_lista_casella(&B);
			svuota_lista_mosse(&StackMosse);
			return 0;
		}
		
		
			
		/* interpreta l'input come coordinate di una mossa */
		if (InputMossa(B,StackMosse,Command) == TRUE) {
		da_c = Command[0];
		da_r= Command[1];
		a_c = Command[2];
		a_r =Command[3] ;
		inserisci_storia(Crono,da_c,da_r,a_c,a_r,cattura,lettera);
			
			
		} 
		
		else {
		
			/* Comando non valido */
			printf(" Comando non valido\n");
		}
		
	}
}

1 Risposte

  • Re: Blocco durante eseguzione del programma

    Sembra che il problema stia nella funzione inserisci_storia. La prima volta head = NULL e sarà sempre uguale a NULL, perché head è una copia del puntatore originale. Hai due alternative per ovviare al problema:
    1) Passi head per puntatore, quindi un puntatore doppio (struct nodo_Storia** head), in modo da poter modificare l'head originale del programma dall'interno della funzione in questo modo:
    
    *head = s;
    
    2) La funzione ritorna s, che lo assegnerà a all'head originale

    Prima, però, per verificare che effettivamente il problema sia lì, prova a copiare il codice della funzione stampa alla fine di inserisci_storia e a stampare s.

    Un altro appunto, per assegnare dei semplici char non serve la strcpy, basta la normale assegnazione:
    
    new_head->Da_c = da_c;
    
Devi accedere o registrarti per scrivere nel forum
1 risposte