PDA

View Full Version : [c]matrice dinamica da indici noti solo a run time


mic85rm
10-01-2011, 22:46
char **alloca_matrice(int all_righe,int all_colonne)
{
char **m;
int ii;
m=(char **)malloc(sizeof(char*)*all_righe);
for(ii=0;ii<all_righe;ii++)
{
m[ii]=(char *)malloc(sizeof(char)*all_colonne);
}
return (m);
}



questo è il codice che ho scritto ed è funzionante.
i miei dubbi sono:

1)è corretto procedere in questo modo?
2)la memoria la devo liberare?
3)questo pezzo di codice è una funzione in cui quello che creo mi serve anche in altre funzioni,ogni volta devo invocarla questa funzione e fargliela rieseguire?

Shinnok.Exor
11-01-2011, 00:15
char **alloca_matrice(int all_righe,int all_colonne)
{
char **m;
int ii;
m=(char **)malloc(sizeof(char*)*all_righe);
for(ii=0;ii<all_righe;ii++)
{
m[ii]=(char *)malloc(sizeof(char)*all_colonne);
}
return (m);
}



questo è il codice che ho scritto ed è funzionante.
i miei dubbi sono:

1)è corretto procedere in questo modo?

si, è il modo corretto. Tranne per il fatto che l'indice ii all'inizio lo devi inizializzare a 0, se lasci solamente

int ii;

ii non è inizializzata automaticamente, ed ha il valore di quello che c'era prima in quella locazione di memoria.


2)la memoria la devo liberare?


Si, devi liberarla con free()



3)questo pezzo di codice è una funzione in cui quello che creo mi serve anche in altre funzioni,ogni volta devo invocarla questa funzione e fargliela rieseguire?


Con quella funzione crei una matrice che puoi usare quando vuoi. E' allocata e non sarà distrutta fin quando non lo farai tu con free, quindi la puoi passare a qualsiasi altra funzione ed usarla come vuoi.

mic85rm
11-01-2011, 22:36
innanzitutto grazie Shinnok.Exor

allora:

1)ii non è inizializzata...lo faccio nel ciclo for,suppongo quindi non sia corretto...sbaglio?

2)la free(m) la devo usare prima di terminare il programma?quindi non alla fine della funzione...


3)la passo cosi la m in un altra funzione ... esempio
int scrivi_muro( char **matrice,int sm_lcol,int sm_lrig);