有没有释放系统资源(内存)的API函数,急,解决马一给分。。。

lingbin 2003-08-21 04:57:08
我现在有一个程序释放不了系统资源也就是内存,有没有什么API函数把我这个程序所占用的系统资源给释放掉,注:退出程序出是不能释放系统资源的。
...全文
138 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingbin 2003-08-21
  • 打赏
  • 举报
回复
DirectShow的Filter本来是用Release()就可以释放的,现在它却不能释放,看来还是找本书来看一下才行。
jishiping 2003-08-21
  • 打赏
  • 举报
回复
我没有做过 DirectShow 方面的程序。肯定是你不正确使用 DirectShow 造成的,结果没有
及时释放内存,直到程序结束才释放。你反复强调“想用一个API函数或其他什么方法强制
把它占用的系统资源给释放掉”,这个想法是不可能的,也是不对的。好好看看DirectShow
的编程书籍,特别是你说的调用DecoderFilter时的释放方法。
lingbin 2003-08-21
  • 打赏
  • 举报
回复
我是用DirectShow来编写播放歌曲的,是在创建DecoderFilter时耗掉的系统资源,这个Filter应该是用Release()来释放,可是我已经用Release()来释放了,但是系统资源还是释放不了,也就是说Release()不起作用一样,我跟踪了一下,发现用了Release()之后,还有三个指针指向它,也就是说它还在占用系统资源,并没有释放掉,现在就想用一个API函数或其他什么方法强制把它占用的系统资源给释放掉,我是在创建下一个DecoderFilter之前用Release()来释放的,现在释放不了,再创建一个DecoderFilter它肯定是会占用新的系统资源了,所以就变为在程序运行过程中不停的分配系统资源。

这个问题我已经弄了一个星期了,还是搞不定,那位高手帮我搞定它,分多多的有。
lingbin 2003-08-21
  • 打赏
  • 举报
回复
我是有一条语句,当我执行到它的时候,它就会耗掉我2%的系统资源,我怎么释放都释放不了它占用的系统资源,所以现在只求有一个API函数来释放了。
freshman2003 2003-08-21
  • 打赏
  • 举报
回复
我觉得没有查不出来的内存泄漏,你可以一个一个的查,哪儿申请了一片内存,就应该有相应的代码删除它。
jishiping 2003-08-21
  • 打赏
  • 举报
回复
上面的CodeGuard信息,表明没有发现内存泄漏。可能是你在程序运行过程中不停的分配内
存,没有及时释放,直到程序结束时才释放,此时CodeGuard不认为有内存泄漏。
lingbin 2003-08-21
  • 打赏
  • 举报
回复
to jishiping:
Functions called:
delete (35 times)
memcmp (64 times)
strstr (2 times)
SysReallocMem (46 times)
SysFreeMem (1333 times)
SysGetMem (1341 times)
realloc (1 times)
memcpy (1 times)
delete[] (2 times)
free (24 times)
new[] (14 times)
new (40 times)
calloc (4 times)
malloc (19 times)
Resource types used:
object array (14 allocs, 13 max)
object (40 allocs, 28 max)
memory block (1365 allocs, 591 max)
Modules used:
00400000 08/21/2003 18:45:36 E:\VODSAMPLE\SAMPLE\PROJECT1.EXE
01190000 02/01/2002 16:00:00 C:\WINDOWS\SYSTEM\BORLNDMM.DLL
0CD00000 02/01/2002 16:00:00 D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\CG32.DLL
32600000 02/01/2002 16:00:00 C:\WINDOWS\SYSTEM\CC3260MT.DLL
40000000 01/30/2003 06:04:00 C:\WINDOWS\SYSTEM\RTL60.BPL
400B0000 02/01/2002 16:00:00 C:\WINDOWS\SYSTEM\VCL60.BPL
47480000 06/12/1998 12:25:58 C:\WINDOWS\SYSTEM\OLEDLG.DLL
53000000 06/10/2003 19:32:56 C:\PROGRAM FILES\3721\HELPER.DLL
55000000 05/16/2003 12:54:16 C:\WINDOWS\SYSTEM\CRMSPLIT.AX
55100000 05/16/2003 12:54:16 C:\WINDOWS\SYSTEM\RMSPLIT.AX
55200000 05/16/2003 12:54:16 C:\WINDOWS\SYSTEM\CRMMEM.AX
65000000 05/16/2003 12:54:16 C:\WINDOWS\SYSTEM\RMMPEG2.AX
70BD0000 07/21/2003 18:36:16 C:\WINDOWS\SYSTEM\SHLWAPI.DLL
76110000 04/15/2002 10:02:30 C:\WINDOWS\SYSTEM\WSOCK32.DLL
76150000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\WS2HELP.DLL
76170000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\WS2_32.DLL
76440000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\WININET.DLL
77990000 07/21/2000 20:05:00 C:\WINDOWS\SYSTEM\OLEAUT32.DLL
78000000 05/04/2001 12:05:02 C:\WINDOWS\SYSTEM\MSVCRT.DLL
78720000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\QUARTZ.DLL
795C0000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\MSWSOCK.DLL
7B690000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\MLANG.DLL
7CAF0000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\INDICDLL.DLL
7F900000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\MSSHRUI.DLL
7FBF0000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\MPR.DLL
7FC30000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\MSVCRT20.DLL
7FCB0000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\SHELL32.DLL
7FE10000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\COMDLG32.DLL
7FE40000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\WINSPOOL.DRV
7FF20000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\OLE32.DLL
BFDE0000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\WINMM.DLL
BFE10000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\IMM32.DLL
BFE70000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\VERSION.DLL
BFE80000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\ADVAPI32.DLL
BFE90000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\COMCTL32.DLL
BFF20000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\GDI32.DLL
BFF50000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\USER32.DLL
BFF70000 05/05/1999 22:22:00 C:\WINDOWS\SYSTEM\KERNEL32.DLL
==========================================

怎么知道是那一行,我就一个cpp文件。

因为这个程序我已经调试有一个星期了,大概是知道在那里泄漏了内存,但是怎么改也不能释放内存,所以就想用个API函数来释放了。
jishiping 2003-08-21
  • 打赏
  • 举报
回复
知道了内存在那里泄漏,修改代码,不发生内存泄漏,不就解决了。
lingbin 2003-08-21
  • 打赏
  • 举报
回复
哦,这样子的啊,还没用过呢,看来还得继续学习。
to jishiping:
那有没有释放系统资源的API函数呢,因为我这边既使知道了内存在那里泄漏,也很难解决,的以最好还是有个API函数来解决,最好给点代码啦。
jishiping 2003-08-21
  • 打赏
  • 举报
回复
一般情况下不要使用CodeGuard,它会严重降低程序的运行速度。特别是频繁使用指针的时
候(比如图像处理),使用CodeGuard时的速度会比不使用CodeGuard慢很多倍。
神农氏 2003-08-21
  • 打赏
  • 举报
回复
boundchecker
jishiping 2003-08-21
  • 打赏
  • 举报
回复
CodeGuard是BCB自带的差错的工具。Project -> Options -> CodeGuard,将CheckBox打钩。
程序编译时需要带调试信息。程序如果在IDE里运行,出现内存泄漏或者非法访问内存时,
BCB 就会报错。如果不在IDE里运行,CodeGuard第一次发现错误时,会弹出一个错误信息(
以后就不弹出了)。程序结束后,会产生一个 *.cgl 文件,用记事本(Notepad.exe)打
开,就可以看到出错的地方了(里面会标明哪个cpp的哪一行)。
lingbin 2003-08-21
  • 打赏
  • 举报
回复
to warton:
CodeGuard是什么东西,是API么,我怎么用MSDN找不到这个函数。
warton 2003-08-21
  • 打赏
  • 举报
回复
用CodeGuard
lingbin 2003-08-21
  • 打赏
  • 举报
回复
就是因为我的程序内存泄漏,所以才释放不了,可是我又找不出我的程序在那里泄漏了内存,现在只能看看有没有API函数来释放了。
freshman2003 2003-08-21
  • 打赏
  • 举报
回复
如果你的程序没有内存泄漏,那么从理论上讲,当你退出这个程序时,程序所占用的资源也会自动释放。
albeta 2003-08-21
  • 打赏
  • 举报
回复
KillProcess()

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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