Errore di segmentazione (core dump creato) in C

di il
6 risposte

Errore di segmentazione (core dump creato) in C

Ciao a tutti , scrivo un programma che preleva dei dati (numeri reali scritti con la seguente sintassi: z1 4 5.5) da un file e li mette in un albero per poi stamparli in modo ordinato ....purtroppo mi da l errore scritto nel titolo.... vi posto il codice

grazie mille

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct bin_tree {
char codice[4];
double reale;
double immaginaria;
struct bin_tree * right, * left;
};
typedef struct bin_tree node;

void insert(node **tree, char *cod_id, double val_reale, double val_immag );
void print_inorder(node *tree);

int main(void){
	
	/*Dichiarazioni delle variabili locali alla funzione*/
	
	FILE *file_numeri_reali;
	node *root;
	//node *temp;
		
	/* Acquisire i dati dal file */
	
    char buf[200];
	char *res;
	
	
	printf ("Lettura dati dal file e salvataggio dati nell albero binario \n");

		/* apre il file */
	file_numeri_reali=fopen("numeri_reali.txt", "r");
	if( file_numeri_reali==NULL ) {
		perror("Errore in apertura del file");
		return 1;
  }


		/* legge e stampa ogni riga */
	while(1) {
		char cod[4];
		double real=0;
		double immag=0;
		res=fgets(buf, 200, file_numeri_reali);
		if( res==NULL )
			break;
		
		sscanf (buf, "%s %lf %lf", cod, &real, &immag);
		
		
		
		printf("%s %lf %lf \n", cod, real, immag);
		
		insert (&root, cod, real, immag);
		
	}


	/* chiude il file */
	fclose(file_numeri_reali);
	
	printf("In Order Display\n");
    print_inorder(&root);

	return (0);
}

/*Definizione della funzione per inserire i valori nell albero*/

void insert(node **tree, char *cod_id, double val_reale, double val_immag )
{
    node *temp = NULL;
    if(!(*tree))
    {
        temp = (node *)malloc(sizeof(node));
        temp->left = temp->right = NULL;
        
		strcpy(temp->codice, cod_id);
		printf("codice %s \n", temp->codice);
        temp->reale = val_reale;
        temp->immaginaria = val_immag; 
        printf("parte reale %lf \n", temp->reale);
        printf("parte immaginaria %lf \n", temp->immaginaria);
        *tree = temp;
        return;
    }

    if(val_reale < (*tree)->reale)
    {
        insert(&(*tree)->left, cod_id, val_reale, val_immag);
    }
    else if(val_reale > (*tree)->reale)
    {
        insert(&(*tree)->right, cod_id, val_reale, val_immag);
    }

}

void print_inorder(node *tree)
{
    if (tree)
    {
        print_inorder(tree->left);
        printf("%s %lf %lf \n", tree->codice, tree->reale, tree->immaginaria);
        print_inorder(tree->right);
    }
}

edit :ho aggiornato il codide

6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte