PDA

View Full Version : [C]posso allocare solo 3 matrici sennò il compilatore mi segmentationfaultizza..


santaclause83
09-05-2007, 14:26
ho problemi con l'inizializzazione di più matrici,dopo 3 volte che alloco spazio e inizializzo la struttura dati casco in un famigerato segmentation fault..

// Struttura dati matrice

typedef struct matrice {
int r, c; // numero di righe e di colonne
char nomemat[N];
double **vett; // Puntatore al vettore contenente gli elementi
}t_nmat;

////funzione che prende il nome e la stringa di elementi,alloca spazio e inizializza una nuova matrice

t_nmat alloca_mat(char *nome,char elementi[]){


......procedure varie per estrarre dall'array di char gli elementi della matrice,contare numero righe e colonne e inserire i numeri in un array di nome els[]

nuova->r = m;

nuova->c = n;



/*inizializzazione dello spazio riservato agli elementi della matrice tramite il puntatore di t_nmat*/


nuova->vett = calloc(m,sizeof (*nuova->vett));



if (!nuova->vett){printf("spazio non allocato per i puntatori ai vettori \n");exit(1);}



for (i=0; i<n; i++) {



nuova->vett[i] = calloc(n, sizeof (**nuova->vett));



if (!nuova->vett[i]) { /* Errore! Rilasciamo tutto e restituiamo 0 */



printf("spazio non allocato per i vettori \n");



for (i--; i>=0; i--){

free(nuova->vett[i]);

free(nuova->vett);

exit(1);

}

}





}//chiusura ciclo di inizializzazione spazio per gli elementi della matrice





count = 0;//reinizializzo count e lo uso per scorrere l'array els[] con gli elementi


for(i=0;i<m;i++){

for(j=0;j<n;j++){

nuova->vett[i][j] = els[count];

count++;

}



}




return *nuova;

}




nel main di prova inizializzo e inserisco matrici in un array di tipo t_nmat

int main(void){



char dati1[N] = "1 2 3 4 ; 5 6 7 8 ; 1 2 4 6 ;";
char dati2[N] = "3.4 2.5 3 6 8 ; 4 6 89 12 10 ;";
char dati3[N] = "1 2 ; 3 45 ; 12 1 ; 12 8 ;";



alloca_mat("gigi",dati1);
alloca_mat("marco",dati2);
alloca_mat("giuseppe",dati3);


return 0;

}


RISULTATO:con delle stampe di controllo noto che per due matrici tutto va bene,però la terza me la crea e restituisce un segmentation fault.
se per esempio ne creo 4,la quarta non la considera nemmeno perchè per come ho scritto il codice alla terza matrice vado fuori con la gestione della memoria.

non capisco perchè..