热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

outofsystemresource.为什么?????

在程序中,我每一分钟做一次拷屏操作:代码如下:TCanvas*dtCanvasnewTCanvas;dtCanvas->HandleGetDC(0);
在程序中,我每一分钟做一次拷屏操作:
代码如下:
......
TCanvas *dtCanvas = new TCanvas; 
dtCanvas->Handle=GetDC(0); 

Graphics::TBitmap *bitmap=new Graphics::TBitmap; 
bitmap->Width=Width; 
bitmap->Height=Height; 

int nColors=GetDeviceCaps(Canvas->Handle,SIZEPALETTE); 
LOGPALETTE* logPal=(LOGPALETTE*)new Byte[sizeof(LOGPALETTE)+(nColors-1)*sizeof(PALETTEENTRY)]; 
logPal->palVersion=0x300; logPal->palNumEntries=(Word)nColors; 
GetSystemPaletteEntries(Canvas->Handle,0,nColors,logPal->palPalEntry); 
bitmap->Palette=CreatePalette(logPal); 
delete[] logPal; 

TRect src=BoundsRect; 
TRect dest=Rect(0,0,Width,Height); 
bitmap->Canvas->CopyRect(dest,dtCanvas,src); 

bitmap->SaveToFile("Screen"+IntToStr(i)+".bmp"); (i在前面已经定义)

delete bitmap; 
delete dtCanvas; 

发现50分钟后,系统报错:
out of system resource.
(重新运行50分钟后,同样出问题。)
问题在哪里?

8 个解决方案

#1


系统资源不足,你的代码有些问题,有些东西使用后没有释放,你要检查一下的代码,比如说:GetDC获得的设备描述表,最后应用ReleaseDC进行释放,CreateDC获得的设备描述表,最后应用DeleteDC释放。

#2


dtCanvas->Handle=GetDC(0); 
对应:ReleaseDC(0)?
GetDeviceCaps(Canvas->Handle,SIZEPALETTE)
对应:ReleaseDeviceCaps(Canvas->Handle,SIZEPALETTE)?

CreatePalette(logPal); 
对应:DeletePalette(logPal)?

小弟不才,初学BCB,尚未接触过这些东西,请指教。

#3


我不是这个意思,对于CreateDC,GetDC,是这样的.对于调色板,位图,画笔,画刷,不是用Release*****,而是用DeleteObject将它进行删除。

#4


具体到我这几行代码,该怎样写?我不了解着方面的知识。
谢谢!

#5


有2处内存泄漏。1.使用GetDC后,没有使用ReleaseDC释放。2.使用CreatePalette得到的调色盘句柄,没有用DeleteObject释放。修改后的代码如下:
TCanvas *dtCanvas = new TCanvas; 
dtCanvas->Handle=GetDC(0); 

Graphics::TBitmap *bitmap=new Graphics::TBitmap; 
bitmap->Width=Width; 
bitmap->Height=Height; 

int nColors=GetDeviceCaps(Canvas->Handle,SIZEPALETTE); 
LOGPALETTE* logPal=(LOGPALETTE*)new Byte[sizeof(LOGPALETTE)+(nColors-1)*sizeof(PALETTEENTRY)]; 
logPal->palVersion=0x300; logPal->palNumEntries=(Word)nColors; 
GetSystemPaletteEntries(Canvas->Handle,0,nColors,logPal->palPalEntry); 
HPALETTE hPal = CreatePalette(logPal); 
bitmap->Palette = hPal;
delete[] logPal;  DeleteObject(hPal);

TRect src=BoundsRect; 
TRect dest=Rect(0,0,Width,Height); 
bitmap->Canvas->CopyRect(dest,dtCanvas,src); 

bitmap->SaveToFile("Screen"+IntToStr(i)+".bmp"); (i在前面已经定义)

ReleaseDC(0, dtCanvas->Handle);  
delete dtCanvas;  delete bitmap;

#6


是用delete[] logPal; 还是delete logPal;?

#7


当然是delete []logPal;

#8


因为经过了类型转换,我也没有这样用过。我认为应该是delete logPal;最好
写成 delete[] (BYTE*)logPal; 这样就和new一致了。

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
author-avatar
凌亂的回譩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有