參考鏈接:https://www.cnblogs.com/usec/p/7413829.html
使用二維數組的時候,有時候事先並不知道數組的大小,因此就需要動態的申請內存。常見的申請內存的方法有兩種:malloc/free 和 new/delete。
一、malloc/free
(1)申請一維數組
void dynamicCreate1Array() { int m; int i; int *p; cout<<("please input the length of data:"); cin >> m; p = (int*)malloc(sizeof(int)*m);//動態開辟 cout << "please input data" << endl; for (i = 0; i < m; i++) cin >> p[i]; cout << "data is :"; for (i = 0; i < m; i++) cout << p[i] << endl; free(p); }
(2)申請二維數組
void dynamicCreate2Array() { int m, n; int i, j; int **p; printf("please input the row and col:"); cin >> m >> n; //scanf("%d%d", &m, &n); p = (int**)malloc(sizeof(int*)*m); //開辟行 for (i = 0; i < m; i++) { *(p + i) = (int*)malloc(sizeof(int)*n);//開辟列 } //輸入數據 printf("please input data:"); for (i = 0; i < m; i++) for (j = 0; j < n; j++) cin >> p[i][j]; //輸出數據 for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { cout << p[i][j]; } cout << endl; } //釋放開辟的二維空間 for (i = 0; i < m; i++) free(*(p + i)); }
二、new/delete
(1)申請一維數組
void DynamicCreate1Array() { int len; int i; cout << "please input the length of data: "; cin >> len; int *p = new int[len]; cout << "please input data: "; for (int i = 0; i < len; i++) cin >> p[i]; cout << "data is " << endl; for (i = 0; i < len; i++) cout <<p[i] << endl; delete[] p; }
(2)申請二維數組
void DynamicCreate2Array() { int m, n; int i; cout << "input row and col: "; cin >> m >> n; //動態開辟空間 int **p = new int*[m]; //開辟行 for (int i = 0; i < m; i++) p[i] = new int[n]; //開辟列 cout << "input data: "; for (i = 0; i < m; i++) for (int j = 0; j < n; j++) cin >> p[i][j]; cout << "output: " << endl; for (i = 0; i < m; i++) { for (int j = 0; j < n; j++) cout << p[i][j]<<" "; cout << endl; } //釋放開辟的資源 for (i = 0; i < m; i++) delete[] p[i]; delete[] p; }
注:另一種方法:
row:行
col:列
unsigned int **ppPathes;
*ppPathes = (unsigned int *)calloc(row * col, sizeof(unsigned int));
使用malloc:
*ppPathes = (unsigned int *)malloc(sizeof(unsigned int )*(PathNumTemp) * (pathLenTemp + 1));