DAY10

问题一:new与malloc的区别

1.从返回值上来看

new返回的地址是自动转换的

malloc返回的地址是需要强转的

2.从名称上

new是运算符,可以调用重载运算符函数(operator)进行重载

而malloc虽然是函数,但是参数固定不能进行函数重载

3.参数上来看

new是不需要传参的,它分配空间的大小由编译器根据类型计算得出

而malloc是需要传参的,传递的是具体开辟空间的大小的字节数

4.从底层在来看

new是先调用malloc函数,先在堆区中开辟,如果这段空间的类型是类的话,会调用构造函数,对对象里面的成员变量进行赋值

而malloc仅仅只是在堆区中开辟空间

5.从空间开辟失败的后果上来看

new开辟空间失败会抛出一段异常

而malloc会返回一个空指针

6.从已分配内存不够用扩张上来看

new不支持内存的扩张

malloc可以调用realloc扩张内存

问题二:delete和delete[]的区别

首先,delete是先调用析构函数,再调用free函数

要判断他俩的区别我们可以从析构函数上来看,我们都知道析构函数是释放成员变量所指向的堆区空间的,那么如果成员变量在堆区开辟了3个对象的空间的话,假设p是指针类型的成员变量,它指向了堆区中三个对象的第一个对象,那么如果是delete p的话,只会调用一次析构函数,而如果是delete【】就会调用三次析构函数

由此我们可以看出,delete很有可能没有释放干净我们开辟的堆区空间,造成堆区内存的泄露

问题三:野指针

如何产生?

1.定义指针变量的时候就没有进行初始化

2.一个指针变量指向的堆区空间被释放了,但是却忘记赋空

3.数组越界了

如果避免?

1.如果指针变量暂时没有初始化的值,就把它先变为空指针

2.记得释放完堆区空间之后,及时赋值为空

3.注意数组边界问题

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值