PDA

Visualizza la versione completa : [C] Allocare dinamicamente un array


XWolverineX
23-12-2005, 16:53
Per l'allocazione dinamica in C si fa cosi

int *a = malloc( sizeof(int))
ma se volessi allocare un array?

int *a[] = malloc( 5 * sizeof(int))
restituisce un array di 5 elementi?

Poker1
23-12-2005, 18:36
uhm no semplicemente:

int *a = malloc( 5 * sizef(int) );

unomichisiada
23-12-2005, 19:26
Originariamente inviato da Poker1
uhm no semplicemente:

int *a = malloc( 5 * sizef(int) );
Manca il cast a int*..malloc restituisce un puntatore a void



int *a = (int*)malloc( 5 * sizef(int) );

Poker1
23-12-2005, 20:07
il gcc nn mi dice niente :D

cmq io di solito uso la calloc e' un po' piu comodo, invece di fare la moltiplicazione, gli dai il numero e la dim di ogni elemento

unomichisiada
24-12-2005, 01:46
Originariamente inviato da Poker1
il gcc nn mi dice niente :D

cmq io di solito uso la calloc e' un po' piu comodo, invece di fare la moltiplicazione, gli dai il numero e la dim di ogni elemento
Strano è proprio un errore. A me mingw (porting di gcc sotto win) dice



error: invalid conversion from `void*' to `int*'

Calloc inizializza anche a zero le celle di memoria allocate è questa la differenza con malloc. Per la comodità a me non cambia nulla visto che per entrambe devi inserire un carattere tra il numero di celle ed in sizeof(...) ,per una un '*' e per l'altra ','
:ciauz:

Poker1
24-12-2005, 09:12
ho provato con dev c++ e da errore se nn si fa il cast

unomichisiada
24-12-2005, 11:39
Originariamente inviato da Poker1
ho provato con dev c++ e da errore se nn si fa il cast
Certo perchè dev c++ usa mingw come compiler. Comunque è giusto che ti dia errore perchè lo è! Anche se un compilatore non te lo dice è meglio che lo faccia sempre il cast perchè assicuri al tuo prog maggiore portabilità. :ciauz:

Loading