malloc函数
一、作用
malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
二、定义
1.原型
extern void *malloc(unsigned int num_bytes);
2.头文件
#include <stdlib.h>
3.功能
分配长度为num_bytes字节的内存块
4.返回值
如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
5.说明
关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
6.相关解释
malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
二、函数声明
1.全名
void *malloc(size_t size);
2.备注
void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者…)
三、与new的区别
在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:
int*p;
p=new int;
//返回类型为int*类型(整数型指针),分配大小为sizeof(int);
int*parr;
parr=new int[100];
//返回类型为int*类型(整数型指针),分配大小为sizeof(int)*100;
而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。
int*p;
p=(int*)malloc(sizeof(int)*128);
//分配128个(可根据实际需要替换该数值)整型存储单元,
//并将这128个连续的整型存储单元的首地址存储到指针变量p中
double*pd=(double*)malloc(sizeof(double)*12);
//分配12个double型存储单元,
//并将首地址存储到指针变量pd中
Free()
头文件:malloc.h或stdlib.h
作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数
使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
new和new[]
一、new运算符
1.作用
给单个对象分配空间
2.语法
//new 数据类型
int q=new int;
int p=new(100);
二、new运算符特点
- 自动计算类型所占空间大小
- 自动确定返回指针类型,不需要进行类型转换
- 可以再分配内存的同时初始化无名对象
- 必须用delete来释放空间
三、new[]
1.作用
给数组对象初始化
2.必须用delete[]来清空内存空间
int *q=new int[n];
delete []q;