我们会展示为二维数组分配连续内存的两种方法。第一种首先分配“外层”数组,然后是各行所需的所有内存。第二种一次性分配所有内存。
下面的代码片段演示了第一种技术,第一个malloc
分配了一个整数指针的数组,一个元素用来存储一行的指针,这就是下图中在地址500处分配的内存块。第二个malloc
在地址600处为所有的元素分配内存。在for
循环中,我们将第二个malloc
所分配的内存的一部分赋值给第一个数组的每个元素。
int rows = 2;
int columns = 5;
int **matrix = (int **) malloc(rows * sizeof(int *));
matrix[0] = (int *) malloc(rows * columns * sizeof(int));
for (int i = 1; i < rows; i++)
matrix[i] = matrix[0] + i * columns;