1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。 例如全局变量, 函数执行结束时这些存储单元自动被释放。 效率很高, 但是分配的内存容量有限。 (3)从堆上分配, 亦称静态内存分配。 顺序在运行的时分用malloc或new申请恣意多少的内存, 顺序员本人担任在何时用free或delete释放内存。 静态内存的生存期由我们决议, 使用非常灵敏, 但效果也最多。 2、罕见的内存错误及其对策 发作内存错误是件非常麻烦的事情。 编译器不能自动发现这些错误, 时隐时现, 有时用户怒喜洋洋地把你找来, 顺序却没有发作任何效果, 你一走, 错误又发作了。 编程老手常犯这种错误, 因为他们没有意识到内存分配会不成功。 假如是用malloc或new来申请内存, 应该用if(p==NULL)或if(p!=NULL)进行防错处置。 但是尚未初始化就援用它。 犯这种错误主要有两个原因:一是没有初始化的观念;二是误以为内存的缺省初值全为零, 导致援用初值错误(例如数组)。 内存的缺省初值终究是什么并没有统一的标准, 虽然有些时分为零值, 所以无论用何种方式创建数组, 都别忘了赋初值, 即便是赋零值也不可省略, 内存分配成功并且已经初始化, 但操作越过了内存的边界。 例如在使用数组时经常发作下标“多1”或许“少1”的操作。 循环次数很容易搞错, 导致数组操作越界。 遗忘了释放内存, 形成内存泄露。 含有这种错误的函数每被调用一次就丢失一块内存。 终有一次顺序忽然死掉, 系统出现提示:内存耗尽。 静态内存的申请与释放必须配对, 顺序中malloc与free的使用次数一定要相反, 否则肯定有错误(new/delete同理)。 释放了内存却继续使用它。 有三种状况: (1)顺序中的对象调用关系过于复杂, 此时应该重新设计数据构造, 从基本上解决对象管理的混乱局面。 (2)函数的return语句写错了, 因为该内存在函数体结束时被自动销毁。 没有将指针设置为NULL。 导致发生“野指针”。 【规则1】用malloc或new申请内存之后, 防止使用指针值为NULL的内存。 【规则3】防止数组或指针的下标越界, 特别要当心发作“多1”或许“少1”操作。 【规则5】用free或delete释放了内存之后,
https://blog.sciencenet.cn/blog-559014-430049.html
上一篇:
Delphi教程推荐下一篇:
C++类构造函数初始化列表