C語言malloc()函式:動態分配記憶體空間
標頭檔案:#include <stdlib.h>
malloc() 函式用來動態地分配記憶體空間(其原型為:
void* malloc (size_t size);
【引數說明】size 為需要分配的記憶體空間的大小,以位元組(Byte)計。
【函式說明】malloc() 在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。如果希望在分配記憶體的同時進行初始化,請使用 calloc() 函式。
【返回值】分配成功返回指向該記憶體的地址,失敗則返回 NULL。
由於申請記憶體空間時可能有也可能沒有,所以需要自行判斷是否申請成功,再進行後續操作。
如果 size 的值為 0,那麼返回值會因標準庫實現的不同而不同,可能是 NULL,也可能不是,但返回的指標不應該再次被引用。
注意:函式的返回值型別是 void *,void 並不是說沒有返回值或者返回空指標,而是返回的指標型別未知。所以在使用 malloc() 時通常需要進行強制型別轉換,將 void 指標轉換成我們希望的型別,例如:
動態記憶體分配舉例:
執行結果:
輸入字串的長度:20
隨機生成的字串為:phqghumeaylnlfdxfirc
該程式生成一個指定長度的字串,並用隨機生成的字元填充。字串的長度僅受限於可用記憶體的長度。
malloc() 函式用來動態地分配記憶體空間(其原型為:
void* malloc (size_t size);
【引數說明】size 為需要分配的記憶體空間的大小,以位元組(Byte)計。
【函式說明】malloc() 在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。如果希望在分配記憶體的同時進行初始化,請使用 calloc() 函式。
【返回值】分配成功返回指向該記憶體的地址,失敗則返回 NULL。
由於申請記憶體空間時可能有也可能沒有,所以需要自行判斷是否申請成功,再進行後續操作。
如果 size 的值為 0,那麼返回值會因標準庫實現的不同而不同,可能是 NULL,也可能不是,但返回的指標不應該再次被引用。
注意:函式的返回值型別是 void *,void 並不是說沒有返回值或者返回空指標,而是返回的指標型別未知。所以在使用 malloc() 時通常需要進行強制型別轉換,將 void 指標轉換成我們希望的型別,例如:
- char *ptr = (char *)malloc(10); // 分配10個位元組的記憶體空間,用來存放字元
動態記憶體分配舉例:
- #include <stdio.h> /* printf, scanf, NULL */
- #include <stdlib.h> /* malloc, free, rand, system */
- int main ()
- {
- int i,n;
- char * buffer;
- printf ("輸入字串的長度:");
- scanf ("%d", &i);
- buffer = (char*)malloc(i+1); // 字串最後包含 \0
- if(buffer==NULL) exit(1); // 判斷是否分配成功
- // 隨機生成字串
- for(n=0; n<i; n++)
- buffer[n] = rand()%26+'a';
- buffer[i]='\0';
- printf ("隨機生成的字串為:%s\n",buffer);
- free(buffer); // 釋放記憶體空間
- system("pause");
- return 0;
- }
輸入字串的長度:20
隨機生成的字串為:phqghumeaylnlfdxfirc
該程式生成一個指定長度的字串,並用隨機生成的字元填充。字串的長度僅受限於可用記憶體的長度。
相關文章
- C語言(動態記憶體分配)C語言記憶體
- 【C/C++】記憶體分配函式:malloc,calloc,realloc,_allocaC++記憶體函式
- C++ 動態記憶體分配與名稱空間C++記憶體
- C語言-記憶體分配C語言記憶體
- 關於c語言記憶體分配,malloc,free,和段錯誤,記憶體洩露C語言記憶體洩露
- malloc,calloc,realloc等記憶體分配函式區別記憶體函式
- C語言的記憶體分配C語言記憶體
- C++ 動態記憶體分配C++記憶體
- C++動態記憶體分配C++記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- 函式指標、回撥函式、動態記憶體分配、檔案操作函式指標記憶體
- 動態記憶體分配記憶體
- C++ 指標動態記憶體分配C++指標記憶體
- c和指標中關於動態分配記憶體malloc和qsort的一個例子指標記憶體
- 圖解Go語言記憶體分配圖解Go記憶體
- C語言-記憶體函式的實現(一)之memcpyC語言記憶體函式memcpy
- C語言-記憶體函式的實現(二)之memmoveC語言記憶體函式
- 動態分配記憶體地址(.NET)記憶體
- 核心記憶體分配常用函式使用記憶體函式
- 簡單理解動態記憶體分配和靜態記憶體分配的區別記憶體
- C語言之動態記憶體管理C語言記憶體
- 函式呼叫與空間分配函式
- C語言時間函式C語言函式
- 記憶體分配詳解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc記憶體
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- C語言:記憶體使用C語言記憶體
- C語言記憶體管理,分配、使用、釋放以及安全性C語言記憶體
- C/C++使用malloc為結構體陣列分配記憶體(及free釋放記憶體)的三種方法C++結構體陣列記憶體
- [C++]記憶體分配C++記憶體
- 用動態記憶體讀入任意大小的檔案(c語言)記憶體C語言
- Android NDK開發之旅3 C語言基礎 記憶體分配AndroidC語言記憶體
- C語言記憶體對齊C語言記憶體
- C語言函式手冊:c語言庫函式大全|C語言標準函式庫|c語言常用函式查詢C語言函式
- C語言-記憶體管理之二[記憶體指令]C語言記憶體
- 靜態方法和普通的成員方法||分配記憶體空間的區別記憶體
- Go語言內幕(6):啟動和記憶體分配初始化Go記憶體