c/c++ 补漏之动态内存分配,malloc,free,new delete (一)

来源:互联网 发布:网络市场调研报告范文 编辑:程序博客网 时间:2024/05/16 08:52

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++两者皆可

0 0
原创粉丝点击