内存管理中常见的问题

1、分配方式:3种从静态存储区域分配、在堆栈上分配和动态内存分配。
2、动态分配内存的缺点:
动态分配内存时有可能产生内存碎片;
如果动态分配内存失败,需要检查返回值或者捕获异常;
动态创建的对象可能被删除多次或者删除后还继续被使用,发生运行时的错误或者程序耗内存现象。
3、常见的内存错误:
内存泄露:通常是指堆内存泄露,内存在堆上分配后,如果不使用需要立即进行释放。在C/C++中不会自动回收不再使用的内存。
内存越界访问:分为两种,一种是读越界,即读取了不属于自己的内存区域。如果区域无效,则程序立即崩溃。若有效可能导致不可预料的后果;另一种是写越界,也成为缓冲区溢出。
野指针:指不可用区域的指针,一般释放内存后,立即把指针设为空值来避免产生野指针。
虽然内存分配未成功,但内存已经被使用。一般需要添加防错处理。
内存分配成功,但尚未初始化内存就使用。
返回临时变量的指针。栈里边的变量都是临时的,当函数执行完时,相关的临时变量和参数就被清除了,不允许将临时变量的指针返回给调用者。
试图修改常量。
误解传值和传引用。
3、new()/delete()和malloc()/free()区别:
前者是C++的运算符,后者是C++/C语言的标准库函数;
对于非内部数据类型的对象,仅仅使用后者是不能满足动态对象的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值