Les tableaux multidimensionnels alloués par calloc

J'ai une question sur la façon dont la mémoire est allouée lorsque je calloc. J'ai eu un coup d'oeil à cette question, mais il ne traite pas de la façon dont la mémoire est allouée dans le cas d'un allouée dynamiquement tableau à deux dimensions.

Je me demandais si il y avait une différence dans la mémoire de représentation entre l'une des trois façons suivantes d'allouer dynamiquement un tableau 2D.

De Type 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]

De Type 2:

double  **array1;
int ii;

array1 = calloc(10 * 10, sizeof(double *));
//Then access array elements like array1[ii + 10*jj]

Type 3:

double  **array1;
int ii;

array1 = malloc(10 * 10, sizeof(double *));
//Then access array elements like array1[ii + 10*jj]

De ce que je comprends de calloc et malloc, la différence entre les deux derniers, c'est que calloc est mise à zéro de tous les éléments de la matrice, alors que malloc ne sera pas. Mais qui sont les deux premières façons de définir la matrice d'équivalent dans la mémoire?

De Type 2 et de Type 3 sont fondamentalement la même chose, à l'exception de la mémoire sera mis à 0 avec calloc. Ne sais pas si il y a une vraie différence avec le Type 1 bien que.
vraiment juste l'espace supplémentaire pour les pointeurs et le fait que les blocs de 10 doubles, peut-être non contigus
Oh, en fait, ne pense pas de cette. Bon point.
Les cas 2 et 3 ne pas allouer de doubles.
double possible de Comment sont multi-dimensions des tableaux formatés en mémoire?

OriginalL'auteur Kitchi | 2013-05-23