基于C语言的内存泄漏检测方法

5852 2009-02-20 08:42:55
有没有比较好的算法或者开源库可以使用的,大家帮忙推荐一下。
...全文
348 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
conquer 2009-03-10
  • 打赏
  • 举报
回复
purify
linren 2009-03-10
  • 打赏
  • 举报
回复
VC的话,可以试一试"PageHeap"工具
candy110 2009-03-10
  • 打赏
  • 举报
回复
我们的代码里面都是自己写的.
其实你也可以自己写.
就是重写malloc,free.
用链表来实现.
最终程序退出的时候链表上应该没有数据.
howema 2009-03-10
  • 打赏
  • 举报
回复
linux下好像可以用查看交换分区的方式,去看每个进程的内存使用情况,如果一个进程的内存只增加,不减少,就有可能内存泄漏了!
lingyin55 2009-02-23
  • 打赏
  • 举报
回复
mark
Dinelgua 2009-02-23
  • 打赏
  • 举报
回复
可以自己实现内存池管理
通过分配内存是加边界,增加标志位,引用计数等保证内存资源正确回收
msnsnd 2009-02-23
  • 打赏
  • 举报
回复
可以用链表实现吧,malloc一个就把地址插入链表,然后free的时候就检查是否释放了
ForestDB 2009-02-23
  • 打赏
  • 举报
回复
有兴趣可以看看lcc的实现,貌似那个作者实现了C的垃圾回收。
沙漠里的海豚 2009-02-23
  • 打赏
  • 举报
回复

linux下可以用valgrind工具检测 呵呵
whuyotc 2009-02-23
  • 打赏
  • 举报
回复
mark
happytang 2009-02-21
  • 打赏
  • 举报
回复
VC和java都是有工具的,开源库上也有;可以说也不是完全能检测出来的
纯c特别是嵌入式应用中很少,肯定要自己弄的;需要再内存管理中增加控制头的标记,计数等,然后定时核查的等
dongpy 2009-02-21
  • 打赏
  • 举报
回复
如果只是为了查看堆内存使用情况,可以重写malloc和free接口。
void* Malloc(size_t sz)
{
void* p = malloc(sz);
//添加一条记录(p,sz)
return p;


void Free(void *p)
{
//查找并删除记录
free(p);


struct record
{
void* p;
size_t sz;
};
dongpy 2009-02-21
  • 打赏
  • 举报
回复
查一下垃圾收集器相关资料
  • 打赏
  • 举报
回复
懒得找了,帮顶吧.
hhllxxss 2009-02-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 waizqfor 的回复:]
引用楼主 5852 的帖子:
有没有比较好的算法或者开源库可以使用的,大家帮忙推荐一下。

算法挺多的 LZ看看 这个解决内存泄露的方法 _CrtDumpMemoryLeaks函数就可以
http://c.chinaitlab.com/vc/200811/769507.html
[/Quote]

up!!!
waizqfor 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 5852 的帖子:]
有没有比较好的算法或者开源库可以使用的,大家帮忙推荐一下。
[/Quote]
算法挺多的 LZ看看 这个解决内存泄露的方法 _CrtDumpMemoryLeaks函数就可以
http://c.chinaitlab.com/vc/200811/769507.html
lei_zhuyan 2009-02-20
  • 打赏
  • 举报
回复
公司里面有个专门检测这个的,但是平时只用,看不到怎么实现的。

呵呵 UP
UML StateWizard for VS.NET/VC6/EVC4可为嵌入式系统或Win32/WinCE开发带来可视化、基于可移植C语言的UML状态机编程机制。同时,作为Visual C++的插件,它使得开发者可以在强大的Visual C++开发环境中进行嵌入式系统的编写、调试以及模拟,从而使您的程序可以在最短时间内投入使用! UML StateWizard采用了状态机模型的开发方法,并与Visual C++紧密合作。有效地利用了Visual Studio强大的代码编写和调试能力,完成嵌入式应用程序在Windows平台上的设计和模拟。 如同Visual C++中的Class Wizard(类向导)一样,UML StateWizard具有以下特点: > (1)在集成开发环境中使用流畅,免去您在设计和开发环境间的不断切换之苦 > (2)不需要价格昂贵的重量级建模工具,您一样可以运用状态图 / 状态树为嵌入式系统建模 > (3)在基于状态机框架下,您可以快捷地开发嵌入式软件 > (4)充分地发挥状态图的能力,为您实现可自由移植的标准C语言代码 > > UML StateWizard为嵌入式系统开发提供了整套解决方案,包括: > 1)状态图 > 无需使用昂贵的重量级CASE工具,状态图即可让您一览应用程序的逻辑结构和流程。它形象地描述了层次化的状态关系。此外,状态图还可以直观地将状态间的迁移展现在您的眼前 > 2)状态树 > 是运用状态机进行开发的有利助手,状态树位于Visual C++的Workspace Tab窗口。在开发过程中,它能够提供一个状态机代码自动生成框架,帮您轻松地完成诸如“新建一个状态机应用”、“新建一个状态”、“定义状态的入口/出口函数”以及“定义事件处理函数”这些重复性的工作。在调试期,您还可以在状态树中获得跟踪功能支持 > 3)状态自动机引擎 > 管理着所有的状态机应用(包括激活应用和非激活应用)。每个状态机应用都运行在一个状态机之上。引擎可以将状态机事件合理分派到具体的应用中,同时调用相关函数以处理状态机事件 > 4)数据资源产生器 > 只需使用Visual C++的资源编辑器,您就魔术般产生多种基于嵌入式系统开发的UI数据资源,包括ASCII / Unicode文本字符串,层次化菜单,位图和字体 > 5)模拟和调试支持 > 提供了大量用于在Windows平台下模拟嵌入式应用程序的API函数和调试工具。通过运用这些工具,您可以不费劲地找出内存泄露 / 内存覆盖的“臭虫”、判断内存是否分配合理、检测程序在限定内存下的运行情况和为后期分析记录下分配信息 > 6)代码量统计支持 > 让您轻松统计C / C++项目的工作量 > 7)内存开销分析器 > 让您及时了解程序中内存的使用情况 > > UML StateWizard 没有任何功能限制,您可尽情使用.

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧