天天看點

動态記憶體開辟 初學

動态開辟記憶體空間的方法: malloc calloc realloc

malloc: 在堆區開辟指定大小空間 ,傳回空類型指針

開辟方法 : int*p=(int*)malloc(n); 開辟n個位元組大小的空間,強制轉換為int*類型,傳給p。

calloc:在堆區開辟指定大小空間,并且将空間内各個位元組初始化為0

開辟方法: int* p=(int*)calloc(n,size) 開辟n個位元組大小為size的空間大小(類似于數組),強制轉換為int*類型傳給p;

realloc:改變堆區的動态記憶體空間大小;

開辟方法: realloc(arr,size) 即将arr指向的空間重新開辟為大小為size的空間;

在開辟過程中,如果記憶體之間的記憶體間隙不夠,則會更換起始位址,重新尋址開辟新空間,如果開辟失敗傳回空位址,開辟成功傳回 起始位址; 注: realloc(NULL,size) 當realloc接受到一塊空位址,相當于malloc開辟一塊新空間;

free(p); p=NULL;

在動态記憶體空間使用完畢的時候需要釋放,不然會導緻堆區記憶體空間擠壓,記憶體碎片多,記憶體使用效率低。

并且如果在外部函數建立了動态記憶體,且未得到釋放,當外部函數結束,且指針被銷毀,導緻無法找到動态記憶體,那麼開辟的動态内

存将會發生記憶體洩露,無法被銷毀;

動态記憶體開辟 初學

柔性數組

在C99标準中,結構體的最後一個成員(最少兩個成員)可以是大小未知的數組; 而這個數組可以采用動态記憶體開辟的方式建立

例子: struct S{int a; int arr[]/int arr[0] ; };

struct S* s= (struct S*) malloc( sizeof(struct S) + sizeof(int)*n )

動态記憶體開辟 初學
動态記憶體開辟 初學