内存泄露和内存溢出

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

相关推荐

实习8个月后 我成了正式工(团的日常实习是没有转正的,那段时间实习的同时备战秋招)❤️ 职场感受大三五月原计划是找一份互联网的暑期实习,当时就很想来美团(不过一想当时的简历也是白扯),后来机缘巧合和朋友到了企模的全国总决赛,就去徐州参加比赛了,也就错过了暑期实习的机会。不过比赛拿了国奖。回来之后也是各种比赛的准备,答辩把原来应该的暑期实习推迟到了七月,当时一共投了两家公司:美团和快手,说来也巧,快手和美团的一面、二面还有录用通知都是在同一天,当时也是没有纠结选择来到了美团(看来冥冥之中自有天意)👨🏻‍💻 工作环境7.10日入职美团,至今已经六个月的时间,其中有四个月我都在一边实习一边准备秋招(崩溃的笔试之后崩溃的等消息,等消息之后崩溃的面试),当时我的mentor还有我们部门的同事们都帮了我好多,带着我做项目,指导我修改简历,帮助我准备面试指出我的不足(功不可没!秋招的时间线来到末尾,当时收到了京东、字节的面试,但是都有很纠结的地方,期间我一直在美团争取面试机会,最终在差点签一个做保本前收到了美团的面试(和hr说明我的情况后很快帮我安排我的面试),面试的过程也十分的顺利,最后在收到offer的当天晚上我就联系了导员第二天去取三方。不给团子反悔的机会。就我自身情况而言还是很推荐大家来团滴~团对于应届生的锻炼还是很好的,最好的是遇到了很好的 mentor和同事们!而且美团的员工文化方面做的也很好!盲盒、大袋鼠和各种周边都超级好看! #美团求职进展汇总# #牛客创作赏金赛# #想实习转正,又想准备秋招,我该怎么办# #如果实习可以转正,你会不会放弃秋招# #美团工作体验# #美团校招#
点赞 评论 收藏
分享
FETCH API是一种用于进行网络请求的新的原生JavaScript API,它提供了一种更简单和现代化的方式来发送和接收数据。相比之下,XMLHttpRequest(XHR)是一种较旧的用于进行网络请求的原生JavaScript API。一些FETCH API与XMLHttpRequest之间的主要区别包括:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=2d6077ad79aa408fb541e64c9f6e1ddf语法的不同:FETCH API使用基于Promise的新语法,使其更易读和使用。而XMLHttpRequest使用传统的回调函数方式。处理响应类型:FETCH API提供了更简单的方法来处理各种不同类型的响应,如JSON、文本、blob等。而在XMLHttpRequest中,需要手动设置responseType属性来处理不同的响应类型。跨域请求:使用FETCH API进行跨域请求更简单,因为默认情况下它会处理跨域资源共享(CORS)。而XMLHttpRequest需要通过设置适当的请求头和服务器响应来处理跨域请求。取消请求:FETCH API提供了一个AbortController来取消请求的能力,而在XMLHttpRequest中取消请求相对复杂。上传和下载进度:FETCH API提供了更简便的方式来获取请求的上传和下载进度,而在XMLHttpRequest中需要手动设置事件处理程序来追踪进度。总体而言,FETCH API提供了一种更加简单和现代化的方式来进行网络请求,并具有更多的灵活性和易用性。不过,XMLHttpRequest仍然是广泛使用的技术,特别是在对较旧的浏览器提供支持时。
点赞 评论 收藏
分享
评论
1
5
分享
牛客网
牛客企业服务