内存泄露和内存溢出的区别:
内存溢出 : out of memory 指程序在申请内存时,没有足够的内存空间供其使用,出现out fo memory 比如申请一个int,但给它存了long才能存下的数那就是内存溢出
内存泄露 : memory leak 指程序在申请内存后,无法释放已经申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的结果很严重,无论多少内存,迟早会被占光
即为:不再会被使用的对象的内存不能被回收,就是内存泄露
C++没有垃圾回收机制,我们需要关注那些类型的内存泄漏?
- 堆内存泄漏。在内存中程序员手动分配的一块内存,malloc\realloc\new。完成相关操作后,没有调用相对应的free\delete释放掉内存,这时这块内存就会常驻内存,造成堆内存泄漏
#include <iostream>
#include <new.h>
using namespace std;
void out_of_memroy()
{
cout << "ERROR:内存已耗尽!" << endl;
}
int main()
{
set_new_handler(out_of_memroy);//注意参数传递的是函数的地址;
while(1)
{
new int[1000];
}
return 0;
}
以上代码会在堆区疯狂的动态分配内存空间,导致系统内存耗尽时自动调用set_new_ha