二维数组动态分配内存

来源:互联网 发布:淘宝个人c店代运营 编辑:程序博客网 时间:2024/05/21 07:15

方法一:

// 分配内存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]的方式来访问数组元素,需要分配额外的内存来存储行指针,但是,分配的内存是连续的。是最值得推荐的方法!