int *p[dim]; /*array di puntatori*/
p=(int*)calloc(dim, sizeof(int));/*alloco la memoria per un vettore*/
P=(int*)malloc(sizeof(int*dim)) /*è equivalente al precedente oppure no?*/
ciao,:sexpulp:
int *p[dim]; /*array di puntatori*/
p=(int*)calloc(dim, sizeof(int));/*alloco la memoria per un vettore*/
P=(int*)malloc(sizeof(int*dim)) /*è equivalente al precedente oppure no?*/
ciao,:sexpulp:
Si, in pratica ha scritto la stessa cosa...
ciao
Esatto, col secondo hai allocato la stessa qtà di memoria in maniera dinamica. A differenza di malloc() calloc() invece di allocare i byte in memoria alloca gli oggetti
CIAO
Le differenze tra le due funzioni sono:
Alloca lo spazio di memoria specificato in SIZE usando la forma:codice:void * malloc (size_t SIZE)
dove n è il numero intero di locazioni da allocare, sizeof(tipo) è la dimensione in byte che avrà ogni locazione (es. sizeof(char))codice:n * sizeof(tipo)
Fa la stessa identica cosa di malloc! Le differenze sono 2:codice:void * calloc (size_t SIZE)
- Oltre ad allocare lo spazio, lo inizializza a "0".
- la sintassi di rappresentazione del tipo SIZE
Il primo punto: ad esempio se si alloca lo spazio per un array di interi, tale array conterrà i valori "0" per ogni elemento.
Il secondo punto vede l'utilizzo della "," al posto di "*".
esempio di calloc è
esempio di malloccodice:int *a; a=(int *)calloc(100,sizeof(int));
Spero sia tutto chiaro!!!!codice:int *a; a=(int *)malloc(100*sizeof(int));
x Grunt
c'è un errore di distrazione (in quanto nell'esempio poi è giusto) nella dichiarazione del prototipo di calloc()
giusto per non confondere le idee, qua ci sono i prototipi:
http://www.science.unitn.it/~fiorell...guidac118.html
...Terrible warlords, good warlords, and an english song
Grazie!
quindi, se ho capito bene, al di là della sintassi, l'unica differenza è che calloc inizializza, malloc no.
Quindi una matrice(dim1)(dim2) posso allocarla indifferentemente così:
int *p;
for (i=0; i<dim1; i++)
p=(int *)calloc(dim2, sizeof(int));
o anche
p=(int *)calloc(dim2, sizeof(int)* dim1);
o anche
p=(int *)malloc((sizeof(int)*dim1)*dim2) forse le parentesi non servono!
????????????????????????????
A questo punto, altra domandina:
quel è la differenza fra un vettore modimensionale lungo dim1*dim2 ed una matrice dim1*dim2?
mah!
:sexpulp:
forse non c'è differenza per l'allocazione, ma per l'assegnamento sì?
L'allocazione dinamica di una matrice è un po' diversa:
Puoi usare sia malloc che calloc (ovviamente).codice:int dim1,dim2,i; int **p; p=(int **)malloc(dim1*sizeof(int)); if(p!=NULL) { for(i=0;i<dim2;i++) { *p[i]=(int *)malloc(dim2*sizeof(int)); if(*p[i]==NULL) exit(1); } } else exit(1);
Per un array monodimensionale:
Se ci sono problemi chiedi pure!!!codice:int dim1; int *p; p=(int *)malloc(dim1*sizeof(int)); if(p==NULL) exit(1);
no, non dovrebbero essercene.
mi sa che ho studiato troppo.
Sto leggendo un codice che ha delle strutture da paura; m'ha un po' confuso.
Grazie, comunque.