方法一:
// 分配内存
int **arr = (int **)malloc(row * sizeof(int *));
for(int i = 0; i < row; ++i)
{
arr[i] = (int *)malloc(col * sizeof(int));
}
// 释放内存
for(int i = 0; i < row; ++i)
{
free(arr[i]);
}
free(arr);
说明:可以用arr[i][j]的方式来访问数组元素;但是,需要分配额外的内存来存储行指针,且分配的内存是不连续的,分配和释放时需要多次调用malloc和free函数。
方法二:
// 分配内存
int *arr = (int *)malloc(row * col * sizeof(int));
// 释放内存
free(arr);
说明:分配的内存是连续的,访问方式用*(arr + i * row + j)。
方法三:
// 分配内存
int **arr = (int **)malloc(row * sizeof(int *) + row * col * sizeof(int));
if(NULL != arr)
{
int *head = (int *)arr + row * sizeof(int *);
memset(arr, 0, row * sizeof(int *) + row * col * sizeof(int));
while(--row)
{
arr[row] = head + row * col * sizeof(int);
}
}
// 释放内存
if(NULL != arr)
{
free(arr);
}
说明:可以用arr[i][j]的方式来访问数组元素,需要分配额外的内存来存储行指针,但是,分配的内存是连续的。是最值得推荐的方法!