Premessa:
leggo da 2 file diversi una matrice n*n di costi
ed un vettore di n luoghi.
Quindi, tramite la prima funzione, acquisisco i costi:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N_SEDI 9
/* definizione del tipo di dati */
typedef double** matrice_costi;
typedef char** vettore_sedi;
/* 1^ funzione: legge la matrice dei costi */
matrice_costi legge_matrice_costi()
{
int i,
j,
n = N_SEDI;
FILE *file_costi;
file_costi = fopen("costi.txt", "r");
matrice_costi costo = (matrice_costi) malloc(n * sizeof(double*));
if(file_costi == NULL)
printf("Impossibile aprire il file");
else
{
for (i = 0; i < n; i++)
costo[i] = (double*) malloc(n * sizeof(double));
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
fscanf(file_costi, "%lf", &costo[i][j]);
}
fclose(file_costi);
return(costo);
}
/* dealloca i valori letti dal file costi */
void dealloca_matrice(matrice_costi valori)
{
int i,
n = N_SEDI;
for (i = 0; i < n; i++)
free(valori[i]);
free(valori);
}
mentre, tramite la seconda funzione, leggo il vettore dei luoghi:
/* legge il vettore delle sedi da file */
vettore_sedi legge_vettore_sedi()
{
int i,
n = N_SEDI;
FILE *file_sedi;
file_sedi = fopen("sedi.txt", "r");
vettore_sedi sede = (vettore_sedi) malloc(n * sizeof(char));
if(file_sedi == NULL)
printf("Impossibile aprire il file");
else
{
for (i = 0; i < n; i++)
sede[i] = (char*) malloc(n * sizeof(char));
for (i = 0; i < n; i++)
fscanf(file_sedi, "%s", sede[i]);
}
fclose(file_sedi);
return(sede);
}
/* dealloca i valori letti dal file sedi */
void dealloca_vettore(vettore_sedi valori)
{
int i,
n = N_SEDI;
for (i = 0; i < n; i++)
free(valori[i]);
free(valori);
}
Ho il seguente problema:
nel richiamo della seconda funzione per la lettura delle sedi
il dbg mi restituisce l'errore
"
segmentation fault"
perchè la dimensione della memoria sembra non essere sufficiente!!
a questo punto sono stato costretto
ad aumentare la memoria impostando nella malloc n*n
vettore_sedi sede = (vettore_sedi) malloc(
n*n * sizeof(char));
certo non è una soluzione elegante,
anche perchè, è vero che i valori me li legge correttamente, ma
passandoli ad un'ennesima funzione
il problema "
segmentation fault" ovviamente ritorna.
Come risolvere?????
grazie per le eventuali risposte e spero di essere stato chiaro