可怕的内存问题,你一不注意,可能会让你费劲半天,甚至是好几天,所以养成好的习惯非常重要!!
1、申请内存不一定申请成功,因此申请内存后一定要判断是否申请成功~如下
int *p=new int[30];
if(!p) cout<<"allocation failure";
2、野指针问题(两种)
何为野指针,即一个指针指着不合法的地方,或者指着无效的数据
A
char*p=new?char[6];
strcpy(p,"hello");
delete[]p;
//此时p为野指针
p=NULL;//添加这句才是好的编程习惯
B
指针变量没有被初始化。
3、动态内存的申请与释放必须配对,防止内存泄漏。
4、内存泄漏就是占着茅坑不拉屎
5、堆和栈的区别是函数运行完,会释放栈上的空间,但main函数运行完才会释放堆上的空间。
6、new创建类对象例子:
CTest* pTest = new CTest();
delete pTest;//需释放
CTest mTest;//此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。而new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏
类如果没有在析构函数中释放,那么你就得delete[] 对象名
7、
void func
{
std::vector v;
}
对象v是在栈上创建的。但是,STL 的vector类其实是在堆上面存储数据的(这点可以查看源代码)。因此,只有对象v本身是在 栈上的,它所管理的数据(这些数据大多数时候都会远大于其本身的大小)还是保存在堆上。