内存泄漏:memory leak:
是指由于疏忽或错误造成程序未能释放掉不再使用内存的情况。内存泄漏不是指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
分类:
1. Heap leak:malloc, realloc, new等分配后忘记调用 free和delete删掉
2. resource leak: 程序使用系统分配的资源后没有使用相应的函数释放掉(比如 bitmap, handle, SOCKET 等),导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定(端口号被占用就不能上网)。
3. 没有将基类的析构函数定义为虚函数。当基类指针指向子类对象时,如果基类的析构函数不是virtual, 那么子类的析构函数就不会被调用,子类的资源没有被正确释放,因此造成内存泄漏
内存溢出:out of memory
是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件。