malloc于new的区别

  malloc和free是c/c++语言的标准库函数,new/delete是c++的运算符。

 对于malloc:我们必须计算字节数:如 int *p;p=(int *)malloc(32*sizeof(int)),并且返回后强行转换为实际类型的指针;用malloc申请内存空间后,必须检查是否分配成功;malloc与free两个函数应该是配对出现的,使用free释放时只能使用一次,如果释放两次以上可能会出现错误(空指针例外)。

malloc是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

对于new:new与delete是操作符,和‘+’,‘-’一样。用于动态创建和释放数组或者单个对象。

动态创建时,不必为其命名,new表达式返回为该对象新创建的指针,我们可以通过指针访问该对象。

如  int *p=new int;

new运算符还能初始化对象。如int *p=new int(10);

对于类来说,如果不提供显示初始化,会调用类的默认构造函数初始化对象;

new与delete配对出现,对于delete来说,delete释放后,指针所指向的内存被释放了,指针不再有效。此时指针变成了悬垂指针(悬垂指针指向曾经存放对象的内存,但该对象已经不存在了)。悬垂指针往往导致程序错误,而且很难检测出来。所以一旦删除了指针对象,立即将指针置为0.

总的来说,malloc和free是c/c++语言的标准库函数,new/delete是c++的运算符。它们都可以用于申请动态内存和释放内存。

对于非内部数据类型来说,光用malloc与free是无法满足要求的。对象在创建时自动调用构造函数,对象消亡时自动调用析构函数。所以不能构造函数和析构函数的任务强加于malloc/free。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值