動态開辟記憶體空間的方法: 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 )