[技術] 在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

No Comment

張貼留言