On Sunday 04 November 2001 14:17, Daniele Nicolodi wrote: > Come si fa ad allocare dinamicamente un array bidimensionale ?? > > Io faccio: > > int * vb; Questo è un puntatore ad un vettore, non un array bidimensionale! > vb = (int *)malloc(3*3*sizeof(int)); > > per allocare un vettore 3x3 di interi. > Funziona ma il gcc mi da un sacco di warning se lo uso come > parametro di una funzione del tipo: > > int somma(int m[][3]) > > Quale e` il modo corretto ?? Ci sono due modi: Primo modo: allochi separatamente un vettore di puntatori alle righe e ciascuna riga. La dichiarazione di vb è semplice e chiara, ma sprechi memoria. Questo metodo è utile se usi matrici "sparse" dove non tutte le righe sono effettivamente allocate. int **vb; int i; vb = (int **)malloc(sizeof(int *)*3); for (i = 0; i < 3; i++) vb[i] = (int *)malloc(sizeof(int)*3); Secondo modo: allochi tutto in una volta. La dichiarazione di vb diventa un po' criptica; al limite si può inscatolare in un typedef. int (*vb)[3]; vb = (int (*)[3])malloc(sizeof(int)*3*3); -- Ciao, Flavio Stanchina Trento - Italy "The best defense against logic is ignorance." -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx