内存泄露和内存溢出

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 山西

相关推荐

昨天 11:05
门头沟学院 运营
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

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