首页 > 试题广场 >

说一说什么是内存泄露,如何检测

[问答题]
说一说什么是内存泄露,如何检测
new delete匹配;智能指针;静态分析插件
发表于 2023-02-26 09:38:27 回复(0)
内存泄漏是指已经动态分配的堆内存由于某些原因程序未释放或者无法释放,造成的系统内存浪费,导致程序运行缓慢甚至是程序崩溃等严重后果。
发表于 2023-02-09 19:41:28 回复(1)
没有AddressSanitizer我不认可
发表于 2022-08-10 11:25:44 回复(0)
1. 顾名思义:内存泄漏的意思是,已经动态分配的内存没有及时释放(内存一直被占用着)。 2. 解决: =》new delete匹配 =》智能指针 =》静态分析插件
发表于 2023-11-09 21:46:21 回复(0)
动态分配在堆区的内存没有被及时释放,造成系统内存的浪费,导致程序运行速度慢 避免:动态开辟,及时释放,智能指针来避免内存泄露
发表于 2023-07-26 16:43:58 回复(0)
new, malloc, delete, free,程序员在堆上动态分配的内存空间未及时释放,导致堆空间越来越少最后程序终止由于分配失败。检测可以用一些内存泄漏检测器,主要思想都是重载new运算符去记录new的空间,或者使用智能指针unique_ptr(唯一性,只能只用移动语义std::move进行重新赋值), shared_ptr(共享,内部记录引用计数,归0则清除,但是存在循环引用问题), weak_ptr(不增加引用记录,比如链表中的next指针就可以使用)
编辑于 2024-03-28 11:16:45 回复(0)
指程序中动态分配的内存没有及时释放回收。造成内存浪费,导致程序运行速度减慢或者系统崩溃。
发表于 2023-11-11 13:11:45 回复(0)
程序员在堆区申请的内存,没有手动释放,造成内存泄漏。不良后果可能有影响程序运行效率或造成系统崩溃。智能指针就是为了避免这种情况出现的
发表于 2023-08-30 16:03:47 回复(0)
由new/malloc 开辟的内存没有通过delete/free释放,就会造成内存泄露。
发表于 2023-08-15 11:16:16 回复(0)
CLink
发表于 2023-07-16 10:33:55 回复(0)
5. 缺少拷贝构造函数 两个对象拥有指向同一个动态分配的内存空间的指针。当释放第一个对象的时候,它的析构函数就会释放与该对象有关的动态分配的内存空间。而释放第二个对象的时候,它的析构函数会释放相同的内存,这样是错误的。 6. 缺少重载赋值运算符 这种问题跟上述问题类似,也是逐个成员拷贝的方式复制对象,如果这个类的大小是可变的,那么结果就是造成内存泄露; 8. 没有将基类的析构函数定义为虚函数 当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露。编译程序时添加 -g 选项以生成调试信息。例如,使用以下命令编译程序: 编译程序时添加 -g 选项以生成调试信息。例如,使用以下命令编译程序: g++ -g -o myprogram myprogram.cpp 运行程序时使用 Valgrind 工具。例如,使用以下命令运行程序: TXT 复制 valgrind --leak-check=full ./myprogram 在运行过程中,Valgrind 会记录程序的内存分配和释放情况,并在程序退出时生成报告。--leak-check=full 选项用于检测所有的内存泄漏,如果发现内存泄漏,会在报告中给出相关信息。 分析 Valgrind 报告。Valgrind 报告通常包括内存泄漏的数量、大小、位置以及对应的代码行数等信息,可以帮助开发人员找出程序中的内存泄漏问题,并进行修复。
编辑于 2023-05-16 16:59:17 回复(0)
c++可以采用智能指针
发表于 2022-07-05 21:10:56 回复(0)