int ** Get2Array(int n, int m) { if (n < 2 || m < 0) return NULL; int **s = (int **)malloc(sizeof(int *)*n); //【开辟行空间】 if (s == NULL) { exit(1); } for (int i = 0; i < n; ++i) { s[i] = (int *)malloc(sizeof(int)*m); //【开辟列空间】 //如果在申请的时候,某一个失败了,那么要把之前申请的空间都销毁。 if (s[i] == NULL) { for (int j = i; j >= 0; j--) { free(s[j]); } free(s); s = NULL; break; } memset(s[i], 0, sizeof(int)*m); } return s; } void Destroy2Array(int **s,int n) { if (s == NULL) return; for (int i = 0; i < n; ++i) { free(s[i]); } free(s); s = NULL; }
要动态申请一个n*m的数组,先申请一个二级指针指向大小为n的int指针型数组空间。
再分别为这个数组中的每一个指针,申请一个大小为m的int数组空间。
主函数中调用方式如下:
#include<iostream> using namespace std; int main() { int n, m; int **s = NULL; cin >> n >> m; s = Get2Array(n, m); //heap,free //Destroy2Array(s,n); }