内存泄露和内存溢出

1.内存泄露与内存溢出

内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少获取多次导致内存无法正常回收时,就会导致内存不够用,最终导致内存溢出,即内存泄露会导致内存溢出
内存溢出 (out of memory):指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中,即内存越界。也就是说给你个int类型的存储数据大小的空间,但是却存储一个long类型的数据,这样就会导致内存溢出。

2.内存泄露的常见情况

(1)malloc/new申请的内存没有主动释放
      解决办法:使用free/delete释放内存 (注:malloc/free以及new/delete必须是各自成对出现)
      int *p=new int(10);
      delete p;
     注意:如果用delete释放void指针指向的对象同样也会造成内存泄露。
(2)使用delete去删除数组
        int* ptr = new int[2]; 
       delete ptr; // 错误!释放数组要用 delete[] 
       delete[] ptr; // 正确
(3)基类的析构函数没有定义为虚函数
        当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露。
        A* pa = new B(); 
       delete pa;
3.内存泄露解决
   (1)使用智能指针直接管理内存
   (2)谨慎使用动态内存





#C/C++#
全部评论
内存泄漏,有时候很难找到泄漏点
1 回复 分享
发布于 2022-10-05 18:01 山西

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务