首页 > 编程知识 正文

new和malloc的使用,new函数和malloc

时间:2023-05-04 05:13:03 阅读:146408 作者:4239

1.malloc 和new都是在堆上开辟内存的:

malloc只负责内存的开拓,没有初始化功能,需要用户自己进行初始化

new不仅可以开发内存,还可以像newint(10 )那样进行初始化。 指示堆中打开了4字节的int整形存储器,初始值为10,表示堆中打开了包含10个整形元素的数组(如new int[10] ),初始值均为0。

malloc返回值必须强烈转换为指定类型的地址,因为它指示在2.malloc 是函数堆上打开了100字节的内存,返回void*并指示分配的堆内存的起始地址;

new 是运算符,由于要打开内存必须指定类型并返回指定类型的地址,因此不需要用力转动。 在堆上打开int整形:

INTP1=(int ) malloc ) sizeof (int );=根据读取的字节数释放内存,未初始化

int*P2=newint(0;=根据指定的int类型打开1-个整形存储器,初始化为0

INTP3=(int ) malloc ) sizeof (int ) *100 ); 打开400字节存储器对应于包含100个整形元素的数组,并且未初始化

int *p4=new int100; 400字节的存储器、100个元素的整形数组和元素都初始化为0

3.malloc开辟内存失败返回NULL,new开辟内存失败抛出bad_alloc类型的异常

new运算符实际上是对operator new函数的调用,在它的基础上调用的也是在malloc中打开内存。 new那个比malloc多的是初始化功能。 对类类型来说,初始化就是调用相应的构造函数。

对于4.malloc开辟的内存永远是通过free来释放的;而new单个元素内存,用的是delete,new[]数组,请使用delete[]释放内存。

5.malloc 开辟内存只有一种方式,而new有四种

分别是普通的new (存储器打开失败,抛出bad_ alloc异常)、

nothrow版本的new是,

常数新

定位新闻。

6.还有其它细节方面的差异不做列举

在这里,如果问malloc,也有可能问memcpy等。 要说realloc函数在c中是否可以使用,绝对不能。 由于这些函数复制内存值(即对象的浅复制),因此会出现浅复制的严重问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。