DAY10
2023-12-20 21:42:55
问题一: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.注意数组边界问题
文章来源:https://blog.csdn.net/m0_75178021/article/details/135116416
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!