Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema con liste linguaggio C

    Salve a tutti. Ho un problema per quanto riguarda le liste. Con questo codice in pratica chiedo quanti interi (compresi tra 0 e 7) voglio inserire e li inserisco, dopodichè li converto in binario.
    Adesso essendo un numero che può variare allora ho preso in considerazione di creare delle liste. E così ho fatto, dopo aver creato la lista di tanti elementi quanti sono gli elementi da inserire, ho pensato di mettere dentro ad ogni elemento della lista un array di 3 posti in modo a memorizzarmi i bit di ogni elemento.

    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    struct list{
    int bit[2];
    struct list*next;
    };
    
    struct list list_t;
    
    int prn_f(int bit[]);//SCHERMATA INIZIALE
    struct list *create_lst(int max);//CREO UNA LISTA DI ELEMENTI TANTI QUANTI SONO I VALORI DA INSERIRE
    void conv(int bit[],int max,struct list*s);//CONVERSIONE DECIMALE BINARIO
    void associate(struct list*s,int bit[]);//MEMORIZZA I BIT CONVERTITI NELLA LISTA
    void prn_lst(struct list*s);//STAMPA LISTA
    
    int main(){
    
    //FUNZIONE PER LA CREAZIONE DELLA LISTA
    struct list *lst;
    int bit[7];
    int max=prn_f(bit);
    lst=create_lst(max);
    conv(bit,max,lst);
    //prn_lst(lst);
    }
    //INPUT INIZIALE
    int prn_f(int bit[]){
    int n,a,i;
    
    printf("Quanti valori vuoi inserire?\n");
    	scanf("%d",&n);
    	printf("Inserire valori compresi tra 0 e 7\n");
    	for(i=0; i<n;i++){
    
    scanf("%d",&a);
    
    if(a<0||a>7){
    	printf("ERROR\n");
    	exit (0);
    }
    
    bit[i]=a;
    }
    printf("F=(X,Y,Z)=m(");
    for(i=0; i<n; i++){
    printf("%d",bit[i]);
    if(i<n-1){
    printf(",");
    }
    }
    printf(");\n");
    return n;
    }
    
    //CREAZIONE LISTA DI MAX ELEMENTI
    struct list *create_lst(int max){
    
    
    struct list *start,*p;
    
    start=(struct list*)malloc(sizeof(list_t));
    p=start;//CREO IL PRIMO ELEMENTO DELLA LISTA
    
    int i;
    
    for(i=0; i<max; i++){//CREO TANTI ELEMENTI DELLA LISTA QUANTI SONO I VALORI INSERITI
    p->next=(struct list*)malloc(sizeof(list_t));
    p=p->next;
    }
    p->next=NULL;
    return start;
    }
    
    //FUNZIONE CONVERSIONE DECIMALE BINARIO
    void conv(int bit[],int max,struct list*s){
    int i,j;
    int byte=8;
    int tmp;
    
    struct list*start,*p;
    start=s;
    p=start;
    
    for(j=0; j<max; j++){
    	tmp=bit[j];
    	byte=4;
    	for(i=0; i<3; i++){	
    		if(tmp!=0||byte!=0){
    		if(tmp>=byte){
    			printf("1");//AL POSTO DI PRINT IL VALORE DOVRÀ ESSERE PASSATO ALL'ARRAY DELLA LISTA
    			p->bit[i]=1;			
    			tmp=tmp-byte;		
    			byte=byte/2;
    			}
    		if(tmp<byte){
    			printf("0");//STESSA COSA QUI	
    			p->bit[i]=0;			
    			byte=byte/2;
    			}
    		}
    	p=p->next;
    	}
    printf("\n");
    }
    p=start;
    prn_lst(p);
    }
    
    //STAMPA LA LISTA
    void prn_lst(struct list*s){
    struct list *start,*p;
    printf("LA LISTA STAMPATA SARÀ\n");
    start=s;
    p=start;
    int i;
    while(p->next){
    for(i=0; i<3; i++){
    printf("%d",p->bit[i]);
    }
    printf("\n");
    p=p->next;
    }
    }
    Mi da' Segmentation fault appena lo eseguo.
    Chi mi aiuta ? Grazie !

  2. #2
    che valore inserisci in questo punto?

    codice:
    printf("Quanti valori vuoi inserire?\n");
    	scanf("%d",&n);
    perchè l'array bit è di 7 elementi, se cerchi di inserirne più di tale valore accedi ad un'area di memoria non correttamente allocata.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    int bit[7];

    deve essere

    int bit[8];

    dato che usi l'indice che va da 0 a 7
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.