Ho una domanda su come viene allocata la memoria quando I calloc
. Ho dato un'occhiata alla domanda this, ma non affronta come viene allocata la memoria nel caso di una matrice bidimensionale allocata dinamicamente.Matrici multidimensionali allocate tramite calloc
Mi chiedevo se ci fosse una differenza nella rappresentazione della memoria tra i seguenti tre modi di allocare dinamicamente un array 2D.
Tipo 1:
double **array1;
int ii;
array1 = calloc(10, sizeof(double *));
for(ii = 0; ii < 10; ii++) {
array1[ii] = calloc(10, sizeof(double));
}
// Then access array elements like array1[ii][jj]
Tipo 2:
double **array1;
int ii;
array1 = calloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
Tipo 3:
double **array1;
int ii;
array1 = malloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
Da quello che ho capito di calloc
e malloc
, la differenza tra gli ultimi due è che calloc
azzererà tutti gli elementi dell'array, mentre lo malloc
non lo farà. Ma sono i primi due modi per definire l'array equivalente in memoria?
tipo 2 e tipo 3 sono fondamentalmente la stessa cosa, tranne che la memoria sarà impostata su 0 con 'calloc'. Non so se c'è una vera differenza con il Tipo 1 però. – JBL
@JBL: in realtà solo lo spazio aggiuntivo per i puntatori e il fatto che i blocchi di 10 doppi possono finire per essere non contigui – Dancrumb
@Dancrumb Oh davvero, non ci pensavo. Buon punto – JBL