malloc的全稱是memory allocation,中文叫動態記憶體分配,用於申請一塊連續的指定大小的記憶體塊區域以void*類型返回分配的記憶體區域地址,當無法知道記憶體具體位置的時候,想要綁定真正的記憶體空間,就需要用到動態的分配記憶體。
void* 類型表示未確定類型的指針。C,C++規定,void* 類型可以通過類型轉換強制轉換為任何其它類型的指針。
一般需和free函式配對使用。
基本介紹
- 中文名:動態記憶體分配
- 外文名:memory allocation
- 簡稱:malloc
- 原型:extern void *malloc
- 頭檔案:stdlib.h
函式定義
原型
extern void *malloc(unsigned int num_bytes);
頭檔案
#include <stdlib.h>
函式聲明
void *malloc(size_t size);
返回值
說明
相關函式
與new的區別
int *p;p = new int;//返回類型為int *類型(整數型指針),分配大小為sizeof(int);
int *parr;parr = new int[100];//返回類型為int *類型(整數型指針),分配大小為sizeof(int) * 100;
int *p;p = (int*)malloc(sizeof(int) * 128);//分配128個(可根據實際需要替換該數值)整型存儲單元,//並將這128個連續的整型存儲單元的首地址存儲到指針變數p中double *pd = (double*)malloc(sizeof(double) * 12);//分配12個double型存儲單元,//並將首地址存儲到指針變數pd中
type *p;if(NULL == (p = (type*)malloc(sizeof(type))))/*請使用if來判斷,這是有必要的*/{ perror("error..."); exit(1);}.../*其它代碼*/free(p);p = NULL;/*請加上這句*/int *p = (int*)malloc(sizeof(int) * 100);//分配可以放得下100個整數的記憶體空間。
char *ptr;if((ptr = (char*)malloc(0)) == NULL) puts("Gotanullpointer");else puts("Gotavalidpointer");工作機制
程式示例
正常程式
typedef struct data_type{ int age; char name[20];}data;data*bob=NULL;bob=(data*)malloc(sizeof(data));if(bob!=NULL){ bob->age=22; strcpy(bob->name,"Robert"); printf("%s is %d years old.\n",bob->name,bob->age);}else{ printf("mallocerror!\n"); exit(-1);} free(bob);bob=NULL;記憶體泄漏實例
#include <stdio.h>#include <malloc.h>#define MAX 100000000int main(void){ int *a[MAX] = {NULL}; int i; for(i=0;i<MAX;i++) { a[i]=(int*)malloc(MAX); } return 0;}註:malloc申請之後沒有檢測返回值。
