首先我们要清楚什么是 静态存储区、堆heap、栈stack。
①静态存储区,内存在程序编译的时候就已经分配好,存在于程序的整个运行期间。此区域存放的有 全局变量、static静态变量、常量。
②堆heap,也称为动态内存分配。通常用到的malloc和new函数,就在堆上分配内存,这时一般由编程人员灵活使用,也通常在这个地方容易出问题,发生内存泄漏。
③栈stack,通常某个函数里的局部变量就是在栈上创建的,函数执行完会自动释放。特点效率高,但是内存容量有限。
如何避免内存错误呢?那么就需要加强自己的编程修养。
㈠ 每次用malloc或new分配内存,都检查返回的指针地址,知道是否分配成功。如果后面直接对空的地址指针进行操作就会出现内存错误。
对非配的内存区域进行初始化。(联想到定义一个数组同样一定要先初始化)
㈡ malloc 和free 配对使用, new和delete对应。如果只分配内存,而不去释放它,随着程序运行时间变长最终会导致内存资源耗尽,这是一个很容易忽视的错误。
㈢ 指针越界的错误,通常这样的错误发生在循环语句中。
㈣ 关于野指针的问题,有人认为对于使用完后的指针 ptr = NULL,显得多余。其实不然,注意细节问题可以减少大量的后期调试 和 维护的 时间。