mallco動態分配 malloc動態分配多維陣列

2021-10-13 09:24:49 字數 1906 閱讀 6931

下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦:重點 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。教材...