1. C语言中的动态内存分配
1.1. malloc
void* malloc(size_t size);
malloc
将为用户分配size
字节个内存,并且返回内存分配的地址,如果分配失败,那么返回0。
int * pa = (int*)malloc(4);
- pa 是分配好的内存的地址,4是要分配的大小,如果分配失败, pa = 0。
1.2. calloc
void* calloc(size_t count, size_t size);
calloc
将为用户分配count *size
字节个内存,并且返回内存分配的地址,如果分配失败,那么返回0。
int * pa = (int*)calloc(1, 4);
- pa 是分配好的内存的地址,1是要分配元素的个数,4是要分配的每个个数的大小,如果分配失败, pa = 0。
pa 会将分配好的内存区域清零
。
1.3. realloc
void* realloc(void* _Block, size_t _Size);
realloc
将为用户重新分配内存,_Block
是用户已经分配好的内存,_Size
是要重新分配的大小,函数返回重新分配后的内存地址。
int * pa = (int*)malloc(4);
pa = (int*)realloc(pa, 8);
- pa 是重新分配后的内存的地址,8是重新分配后的大小,如果分配失败, pa = 0。
1.4. free
void free(void* _Block);
释放内存,_Block
是你要释放的内存地址。
int * pa = (int*)malloc(4);
free(pa);
pa = 0;
- pa所占用的内存释放。
内存释放之后,指针还在的,成为野指针,所以要指针也清零。
2. C++中的动态内存分配
2.1 new
数据类型* 指针变量名称 = new 数据类型;
int* pa = new int;
数据类型* 指针变量名称 = new 数据类型[数量]
int* pa = new int[5]; //分配一段能够存放5个int变量类型的内存空间
- 注意:分配失败,pa返回0.