C语言-动态内存分配总结
生活随笔
收集整理的這篇文章主要介紹了
C语言-动态内存分配总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1 malloc
- 2 calloc
- 區別聯系
- 3 memset
- 4 realloc
1 malloc
void *malloc( unsigned int num_bytes)分配長度為num_bytes個字節的內存塊,返回值為無類型指針,該指針指向所分配內存塊的起始位置,因此利用該無類型指針賦值給其他類型的指針的時候,需要進行強制類型轉換。
int *p = (int *)malloc(sizeof(int) * 20);當內存分配失敗時,返回空指針NULL。在使用malloc 分配內存之后,進行NULL判斷是一個良好的編程習慣。
2 calloc
void *calloc( unsigned int num, unsigned int size)在內存的動態存儲區分配num個長度為size的存儲塊,返回指向該存儲塊起始地址的無類型指針,若返回失敗,返回NULL。因此,同樣需要對該函數返回值進行判斷。
int *p = (int *)calloc(20, sizeof(int));區別聯系
- calloc與malloc的一個相同點在于使用之后均需要free(指針),釋放內存塊。
- 不同點在于calloc分配內存之后,會自動將這一塊的內存之初始化為0,而malloc則不會,分配內存的值為一些垃圾數值。因此,在使用malloc函數之后,我們一般要調用函數memset對內存進行初始化。
3 memset
void *memset(void *s, int ch, unsigned int size)將s所指向的內存塊的前size個字節全部設置為ch對應的ASCii值。 它是對較大數組或者結構體清零操作的最快方式。
memset(p, 0, 80);4 realloc
void *realloc (void *p, unsigned int size);如果已經通過malloc或者calloc獲得了動態空間,想改變其大小,可以使用realloc函數重新分配,將p所指的動態空間大小改變為size,而p的值不變,如果重新分配不成功,返回NULL。原來空間的內容會保留。
總結
以上是生活随笔為你收集整理的C语言-动态内存分配总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言-变量生存期及作用域
- 下一篇: C语言-typedef与#define的