C語言malloc函數為一維,二維,三維數組分配空間


c語言允許建立內存動態分配區域,以存放一些臨時用的數據,這些數據不必在程序的聲明部分定義,也不必等到函數結束時才釋放,而是需要時隨時開辟,不需要時隨時釋放,這些數據存儲在堆區。可以根據需要,向系統申請所取空間的大小,因為沒有在聲明部分定義它們為變量或數組,所以不能通過變量名或數組的方式去引用這些數據,只能通過指針來引用。

對內存的動態分配是通過系統提供的庫函數來實現的,主要有malloc,calloc,free,realloc這四個函數。

接下來寫一下malloc函數如何實現為一維,二維,三維數組分配空間。

一;一維數組的申請與釋放:

例如為一個字符數組分配空間:

char *p = (char *)malloc(m*sizeof(char));

釋放空間:

free(p);

二:二維數組的申請與釋放:

1:使用二級指針:

char **p = (char *)malloc(m*sizeof(char *));

for(i=0;i<m;i++)

{

      p[i]=(char *)malloc(n*sizeof(char *));

}

//釋放空間:

for(i-0;i<m;i++)

{

    free(p[i]);

}

free(p);

2:使用數組指針的方式:

char (*p)[3] = (char(*)[3])malloc(sizeof((char)*m*n);

這種方式分配的內存只需要釋放一次:  

free(p);

三:三維數組的申請與釋放:

char ***p=(char* **)malloc(m*sizeof(char**));

for(i=0;i<m:i++)

p[i]=(char **)malloc(n*sizeof(char*));

for(i=0;i<m;i++)

   for(j=0;j<n;j++)

     p[i][j]=(char *)malloc(p*sizeof(char));

//釋放空間:

for(i=0;i<m;i++)

   for(j=0;j<n;j++)

    free(p[i][j]);

for(i=0;i<m:i++)

free(p[i]);

free(p);

 注意:可以看出分配空間與釋放空間都是逐步進行的,但是釋放空間的順序與分配空間的順序相反。 

  

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM