1.malloc函数
原型:extern void * malloc(int size)
malloc向系统申请分配size字节的内存,返回的类型为void* ,在使用的时候要强制进行类型转换为你需要的类型。
int * ptr = (int * )malloc(sizeof(int ) * 100);
2.free 函数
释放malloc分配的内存
注意事项:
1)申请了内存之后,要检查是否分配成功
if(ptr!= NULL )
2)当不需要再使用分配的内存时,记得释放。释放之后应该把指向这块内存的指针指向NULL,来防止程序后面不小心调用它。
3.malloc()的内存来自哪里?
malloc返回的指针指向堆中内存,系统中有一个记录空闲内存地址的链表,当有申请请求时,就会遍历链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从链表中删除,并返回该结点的地址。
在c++中使用new和delete来动态创建和释放数组和对象。
4.delete 和delete[]区别
delete ptr ,释放单个对象
delete[]ptr,释放数组
当然,delete要和new成对出现。
5.delete 之后,重设指针
delete p
执行完之后,p指针变成了不确定指针,p说指向的内存已经被释放,变成悬垂指针,所以一旦删除了指针所指向的对象,立即将指针置零 int * p = 0;这样就清楚指明指针不再指向任何对象。
6.零值指针和NULL指针
零值指针是值为0的指针,可以是任何一种指针类型。
空指针:是一种状态,是认为的认为它不提供任何地址。
7.new和malloc的区别
1)new返回指定类型指针,自动计算所需空间的大小
int* ptr= new int;
malloc返回void*,需要加上类型转换,由我们计算所需空间
2)malloc只管分配内存,不管内存初始化,得到的内存中,值是随机的。
new可以对对象初始化
int *ptr = new int(100);
3)malloc/free是c++/c的标准库函数,new/delete为c++的运算符。
4)对于非内部数据类型的动态对象的内存管理,由于存在构造和析构,不能对库函数malloc进行修改,使用new/delete。
对于内部数据类型,malloc/new 都可以使用
5)c只能使用malloc/delete,c++两者皆可