您的位置:首页 > 其它

内存管理中常见的问题

2015-08-08 17:16 274 查看
1、分配方式:3种从静态存储区域分配、在堆栈上分配和动态内存分配。

2、动态分配内存的缺点:

动态分配内存时有可能产生内存碎片;

如果动态分配内存失败,需要检查返回值或者捕获异常;

动态创建的对象可能被删除多次或者删除后还继续被使用,发生运行时的错误或者程序耗内存现象。

3、常见的内存错误:

内存泄露:通常是指堆内存泄露,内存在堆上分配后,如果不使用需要立即进行释放。在C/C++中不会自动回收不再使用的内存。

内存越界访问:分为两种,一种是读越界,即读取了不属于自己的内存区域。如果区域无效,则程序立即崩溃。若有效可能导致不可预料的后果;另一种是写越界,也成为缓冲区溢出。

野指针:指不可用区域的指针,一般释放内存后,立即把指针设为空值来避免产生野指针。

虽然内存分配未成功,但内存已经被使用。一般需要添加防错处理。

内存分配成功,但尚未初始化内存就使用。

返回临时变量的指针。栈里边的变量都是临时的,当函数执行完时,相关的临时变量和参数就被清除了,不允许将临时变量的指针返回给调用者。

试图修改常量。

误解传值和传引用。

3、new()/delete()和malloc()/free()区别:

前者是C++的运算符,后者是C++/C语言的标准库函数;

对于非内部数据类型的对象,仅仅使用后者是不能满足动态对象的要求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息