C++内存问题

可怕的内存问题,你一不注意,可能会让你费劲半天,甚至是好几天惊恐,所以养成好的习惯非常重要!!

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本身是在 栈上的,它所管理的数据(这些数据大多数时候都会远大于其本身的大小)还是保存在堆上。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值