Mam pytanie dotyczące przydzielania pamięci, gdy calloc
. Spojrzałem na pytanie this, ale nie opisuje ono sposobu przydzielania pamięci w przypadku dynamicznie przydzielanej tablicy dwuwymiarowej.Tablice wielowymiarowe przydzielone przez calloc
Zastanawiam się, czy istnieje różnica w reprezentacji pamięci między następującymi trzema sposobami dynamicznego przydzielania tablicy 2D.
Typ 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]
Typ 2:
double **array1;
int ii;
array1 = calloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
Typ 3:
double **array1;
int ii;
array1 = malloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
Z tego co rozumiem, z calloc
i malloc
, różnica między ostatnimi dwoma polega na tym, że calloc
wyzeruje wszystkie elementy tablicy, podczas gdy malloc
nie będzie. Ale czy są to pierwsze dwa sposoby definiowania odpowiednika tablicy w pamięci?
typ 2 oraz typ 3 są w zasadzie to samo, z wyjątkiem pamięci ustawionej na 0 za pomocą 'calloc'. Nie wiem jednak, czy jest jakaś różnica w typie 1. – JBL
@JBL: tak naprawdę to tylko dodatkowa przestrzeń dla wskaźników i fakt, że bloki 10 podwójnych mogą się okazać niekonkretne. – Dancrumb
@Dancrumb Och, rzeczywiście, nie myślałem o tym. Słuszna uwaga. – JBL