Linuxtrent: Re: C question

  • From: Flavio Stanchina <flavio.stanchina@xxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Sun, 4 Nov 2001 15:00:13 +0100

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


Other related posts: