[技術] 在C中動態配置2維陣列
Written on 5:04 下午 by Yu Lai
在網路上找到的,就記錄下來筆記一下囉。
在C中動態配置一[m][n]的二維陣列
有下列幾種作法
(ㄧ)
int **Array, *pData;
int m,n,i;
Array = (int**)malloc(m*sizeof(int *));
pData = (int*)malloc(m*n*sizeof(int));
for(i = 0; i < m; i++, pData += n)
Array[i] = pData;
只需做兩次malloc,free只要free Array和Array[0]就可以了
(二)
int i;
int **Array;
Array = (int **)malloc(m*sizeof(void *));
for (i = 0; i < m; i++)
Array[i] = (int *)malloc(n*sizeof(int *));
這樣子的配置方式要做很多次的malloc,,並容易造成記憶體碎片化(memory fragment)
(三)
int i;
int **Array, *pData;
Array = (int **)malloc(m*sizeof(int *)+m*n*sizeof(int));
for (i = 0, pData = (int *)(Array+m); i < m; i++, pData += n)
Array[i]=pData;
這樣是最簡便的寫法 只要mallocㄧ次完成,free只要free Array即可 If you enjoyed this post Subscribe to our feed