Ich habe eine Frage darüber, wie Speicher zugewiesen wird, wenn ich calloc
. Ich habe mir this Frage angesehen, aber es behandelt nicht, wie Speicher im Falle eines dynamisch zugewiesenen zweidimensionalen Arrays zugewiesen wird.Mehrdimensionale Arrays, die über Calloc zugewiesen werden
Ich frage mich, ob es einen Unterschied in der Speicherdarstellung zwischen den folgenden drei Möglichkeiten der dynamischen Zuweisung eines 2D-Arrays gab.
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]
Von dem, was ich vonverstehenund malloc
, der Unterschied zwischen den letzten beiden besteht darin, dass calloc
alle Elemente des Arrays auf Null setzt, während malloc
nicht. Aber sind die ersten beiden Möglichkeiten, das Array äquivalent im Speicher zu definieren?
Typ 2 und Typ 3 sind im Grunde die gleichen, außer Speicher wird mit "Calloc" auf 0 gesetzt. Ich weiß nicht, ob es einen wirklichen Unterschied zu Typ 1 gibt. – JBL
@JBL: wirklich nur der zusätzliche Platz für die Zeiger und die Tatsache, dass die Blöcke von 10 Doubles am Ende nicht zusammenhängend sein können – Dancrumb
@Dancrumb Oh tatsächlich, habe nicht daran gedacht. Guter Punkt. – JBL