下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦:重點 1:深刻理解多維陣列的概念,多維陣列在記憶體中的分配情況,基本上動態分配也沒什麼問題的。然後還要注意一點的就是,釋放是分配的逆過程!!!
#include
#include
#include
void main(void)
int i ;
char (*p)[12] ; //[5][12]
p = malloc(5 * sizeof(char ) * 12); //申請5行的位址空間
for(i = 0 ; i < 5 ; i++)
strcpy(*(p + i), "hello");
for(i = 0 ; i < 5 ;i++)
printf("%s\n" , *(p + i));
free(p);
程式2:
#include
#include
#include
void main(void)
int i;
int j ;
int num = 0 ;
char **p ;//[5][12]
p =(char **) malloc( 5 * sizeof(char *) );
for(i = 0 ; i < 5 ; i++)
p[i] = malloc(12 * sizeof(char));
for(j = 0 ; j < 5 ; j++)
num = 0 ;
for(i = 0 ; i < 12 ; i++)
p[j][i] = 'a' + num;
num++ ;
for(j = 0 ; j < 5 ; j++)
for(i = 0 ; i < 12 ; i++)
printf("%c" , p[j][i]);
printf("\n");
for(i = 0 ; i < 5 ; i++)
free(p[i]);
free(p);
程式3:
#include
#include
#include
void main(void)
char ***pstr;
int i , j , k ;
// 自己分配乙個三維的[3][4][5]
pstr = (char ***)malloc(3 * sizeof(char **)); //第一維
//分配二維的
for(i = 0 ; i < 3 ; i++)
*(pstr + i) = malloc(4 * sizeof(char *));
//分配三維
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 4 ; j++)
*(*(pstr + i) + j) = malloc(5 * sizeof(char));
//使用分配的記憶體
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 4 ; j++)
for(k = 0 ; k < 5 ; k++)
pstr[i][j][k] = 'a' ;
printf("%c" , pstr[i][j][k]);
printf("\n");
//釋放第三維的記憶體
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 4 ;j++)
free((pstr[i][j]));
//釋放第二維的記憶體
for(i = 0 ; i < 3 ; i++)
free(pstr[i]);
//釋放第一維的記憶體
free(pstr);
記憶體動態分配
陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...
動態分配malloc realloc free
1 malloc unsigned int num bytes 分配長度為num bytes的記憶體塊,注意 malloc 只管分配不進行初始化和越界判斷,即剛獲得的記憶體中的資料是隨機的 不進行越界判斷 例如 char k malloc 10 for i 0 i 20 i for i 0 i 20...
動態分配記憶體
動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。c語言動態記憶體分配相關的函式。include void malloc size t size malloc的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤 置為enomem。教材...