Salve a tutti, io dovrei riuscire a costruire una matrice da file,in fase di compilazione qualche warning, ma in esecuzione mi da segmentation fault.... facendo varie prove ho visto ke il problema è nella funzione inserisci matrice
#include <stdlib.h>
#include <stdio.h>
int conta_righe(void);
void inserisci_in_matrice(int**, int);
void stampa_matrice(int**, int);
int main (void){
int **matrice;
int n;
int i,
j;
n=conta_righe();
printf("il numero di righe è %d",n);
/*allocazione array di puntatori alle righe*/
matrice = (int **)malloc(sizeof (int *)*(n));
/*allocazione riga per ogni puntatore dell'array*/
for (i = 0; i < n; i++)
matrice[i] = (int *) malloc (sizeof(int)*(n));
inserisci_in_matrice(matrice, n);
stampa_matrice(matrice, n);
return(0);
}
/*definizione della funzione per inserire i valori da file nella lista*/
int conta_righe(void)
{
/*dichiarazione delle variabili locali alla funzione*/
int contatore,
carattere;
FILE *file_citta; /*lavoro: puntatore al file di input*/
/*aprire il file*/
file_citta = fopen("citta.txt",
"r");
/*verificare esistenza file matricole.txt*/
if (file_citta == NULL)
printf("\nFile inesistente\n");
else
/*il file esiste, quindi prendere dati in input da file*/
{
/*assegnare al contatore il valore '0' come inizio per l'iterazione*/
contatore = 0;
/*contare le righe della della matrice da file*/
while ((carattere = getc (file_citta)) != ',')
if (carattere == '\n')
contatore++;
/*chiudere il file*/
fclose(file_citta);
return(contatore);
}
}
void inserisci_in_matrice(int **matrice, int numero_righe){
FILE *file_citta;
int h = 0, /*variabile contatore*/
i=0,
carattere,
b;
/*aprire il file*/
file_citta = fopen("citta.txt",
"r");
/*acquisire valori triple matricola da file*/
while ((carattere = getc (file_citta)) != EOF) {
fscanf(file_citta,
"%d",&b);
matrice[h][i]=b;
i++;
if(i== numero_righe -1){
i=0;
h++;
}
}
fclose(file_citta);
}
void stampa_matrice(int **matrice, int numero_righe){
int k,
v;
for(k = 0; k < numero_righe; k++)
for(v = 0; v < numero_righe; v++)
printf("%d",matrice [k][v]);
}
e il file di testo è questo
roma roma 00 genova 15 salento 89 padova 55 milano 87
genova roma 15 genova 00 salento 32 padova -1 milano 45
salento roma 89 genova 32 salento 00 padova 22 milano -1
padova roma 55 genova -1 salento 22 padova 00 milano 99
milano roma 87 genova 45 salento -1 padova 99 milano 00
,
lo scopo sarebbe creare un grafo da matrice e calcolare il percorso minimo.. io pensavo di fare qst matrice, poi fare la matrice cn gli 0 e 1 e qujalla dei padri per poi passare il tutto alla funzione di floyd warshall.. va bn o mi è sfuggito qualcosa?? grazie anticipatamente