检查内存泄漏
检查内存泄漏
来源 https://www.zhihu.com/question/63946754/answer/214762551
linux+gcc用valgrind,windows+msvc用vs调试功能。
如果是在windows上跑mingw就坑爹了,要么买专门的商业检测软件,要么用代码侵入的方式,重载operator new,接入内存泄漏检测代码
只要每一个cpp在展开后都能看见这几行(https://github.com/vczh-libraries/Vlpp/blob/master/Source/Basic.h):
#ifdef VCZH_CHECK_MEMORY_LEAKS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define VCZH_CHECK_MEMORY_LEAKS_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new VCZH_CHECK_MEMORY_LEAKS_NEW
#endif
在程序退出的时候,调用_CrtDumpMemoryLeaks函数,Visual Studio的output窗口就会打印所有没有释放的东西(包括全局变量——所以不要在全局变量里面使用非指针或数字类型),双击可以跳进代码。
我都配置成debug模式会检查,每次运行的时候都在检查,有时候我都忘记他在检查了然后突然就蹦出来了消息说我内存泄漏了,然后马上改。所以我的程序绝对没有内存泄漏(逃
如果是Windows的话可以利用在DEBUG环境下检查
#ifdef _WIN32
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
#endif
#ifdef _WIN32
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)|_CRTDBG_LEAK_CHECK_DF);
#endif
好像4.8以上的gcc自带asan.
加编译选项和链接asan库就行,进程退出的时候,帮你打印出来所有申请未释放的内存
因为是一个新特性,它被安排在dev分支(Qt 5.2)。但是您可以把它cherry-pick到Qt 5.0。然后您在配置Qt时使用-address-sanitizer,为您的程序执行qmake CONFIG+=address_sanitizer。
如果您不想cherry-pick,您也可以手动为qmake设置命令行参数MAKE_CXXFLAGS、QMAKE_CFLAGS和QMAKE_LFLAGS:
$ qmake QMAKE_CXXFLAGS+="-fsanitize=address -fno-omit-frame-pointer" \
QMAKE_CFLAGS+="-fsanitize=address -fno-omit-frame-pointer" \
QMAKE_LFLAGS+="-fsanitize=address"
要启用例如地址清理器,您必须编写:
CONFIG += sanitizer sanitize_address
消毒剂选项在Qt的mkspecs(mkspecs/features/sanitizer.prf
和mkspecs/common/sanitize.conf
)中定义,当您添加时会加载它CONFIG += sanitizer
。快速浏览我的sanitizer.prf
(Qt 5.7.0),可以看到特定的消毒剂是:
sanitize_address
sanitize_memory
sanitize_thread
sanitize_undefined
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南