首先说一下内存异常的一些常用概念:
内存泄露:malloc申请堆内存时,没有进行free释放内存,导致内存被占用;
内存溢出:因为内存泄露太多,导致内存被用完,就会出现内存溢出的报错,在windows中弹窗内存溢出是挺常见的;
野指针:内存free释放后,没有赋值null,指针仍然指向未申请使用的内存地址,访问野指针会导致无法预期的数据修改,可能导致程序崩溃;
内存踩踏:访问越界导致腹泻了非目标地址内的数据,常见于循环访问数组时设置循环次数有误,导致访问越界,写入数据将非数组内的变量也覆盖掉了;
C++的新空间开辟
程序中需使用堆内存时,必须要申请空间,方法有malloc或者new;申请空间后释放内存,可以用free或者delete。
他们的相同点是malloc/free和new/delete都是用来申请和释放堆空间的;
他们的不同点:
1、malloc/free是库函数,new/delete是表达式
2、malloc开辟空间不会初始化,new表达式开辟空间会直接将变量初始化
3、返回值不同,malloc返回的是指针,new是表达值,直接操作对象,没有返回值
4、malloc/free不能用来操作对象,它们是没有析构函数的;只有new/delete可以操作对象