打印

程序运行导致系统蓝屏

[复制链接]
2906|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llia|  楼主 | 2010-8-19 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我的程序运行   易导致系统蓝屏呢??
是不是   内存益出   泄露等原因导致的??
沙发
llia|  楼主 | 2010-8-19 21:48 | 只看该作者
另:C++BUILDER   是否有工具检查系统是否有内存泄露   如有望详细告知   


谢谢大家了   郁闷死我了

使用特权

评论回复
板凳
冰清玉洁| | 2010-8-19 21:51 | 只看该作者
这个不好说

C++BUILDER自带的CodeGuard工具就可检查内存泄露

使用特权

评论回复
地板
zhuww| | 2010-8-19 21:54 | 只看该作者
CodeGuard可以内存检测


如果是每次都如此   就好检测了
每次注销掉一句代码
看看那句出了问题
就OK了
慢慢得查

使用特权

评论回复
5
lium| | 2010-8-19 21:55 | 只看该作者
能说说是什么语句造成的么?   好像WIN2K以后的系统很难弄蓝屏,我还特意试了半天,晕~~

使用特权

评论回复
6
llia|  楼主 | 2010-8-19 22:02 | 只看该作者
操作系统是XP,有时候下标越界就可能蓝屏,这次是USB通信这块出问题了

使用特权

评论回复
7
langgq| | 2010-8-19 22:18 | 只看该作者
xp系统蓝屏幕..我碰到过一次,不过不是因为程序
我记得我以前用过清华紫光拼音输入法2.0
用了段时间后系统就蓝了提示0xxxxx   error   云云

使用特权

评论回复
8
langgq| | 2010-8-19 22:21 | 只看该作者
后来据说是什么   常用字库不断膨大造成的
那是我唯一碰到过的情况,平时程序错误,多是异常退出   然后发送报告还是不发送之类的

那么类似的,是否是什么地方   比如某个循环里面   内存不断扩张

使用特权

评论回复
9
wangpe| | 2010-8-19 22:22 | 只看该作者
嗯,USB通信的确可以造成蓝屏(偶们公司的一个USB设备就老是这样)

不过偶没做过这方面的东东,想顺便问问楼主,做USB通信是和串口通信差不多?   还是要涉及到驱动及核心的编程?   要使用DDK之类的东东吗?

使用特权

评论回复
10
guoyt| | 2010-8-19 22:25 | 只看该作者
我也遇到过类似问题有可能是你的DLL里面调用的问题,或是内存益出,好好的调试一下就可以了

使用特权

评论回复
11
llia|  楼主 | 2010-8-19 22:29 | 只看该作者
驱动是性片公司提供的,需要用到   READFILE   WRITEFILE   等   东西和DDK

现在基本上可以确定   是USB   通信时   线程里读取   数据时出问题了(READFILE   出问题)

使用特权

评论回复
12
llia|  楼主 | 2010-8-19 22:30 | 只看该作者
_fastcall   communicationThread::communicationThread(char*projectname):TThread(true)       //线程以挂起状态创建
{
        sdata=new   saveData();
        sdata-> Createfile(projectname);
        g_wavedata=0;
        FreeOnTerminate=true;
        Resume();                             
}
//---------------------------------------------------------------------------
  _fastcall     communicationThread::~   communicationThread(void)     //   类的析构函数
  {
        delete   sdata;
        sdata=NULL;
  }
//---------------------------------------------------------------------------
void   _fastcall   communicationThread::Execute(void)                           //通讯线程
{
        unsigned   long   ByteNumber=0;
        while(!Terminated)
        {
                unsigned   short   i=0;
                if   (   ReadFile(Hpipe,   &buffer[0],   128,   &ByteNumber,   NULL))//加上这句   就出问题了   不加则无任何问题


commThread=new   communicationThread(frmTestenter-> path);           //   通讯子线程开启
commThread-> Priority   =tpTimeCritical;

使用特权

评论回复
13
llia|  楼主 | 2010-8-19 22:31 | 只看该作者
这是结束线程
if   (   commThread   )
        {
                commThread-> Terminate()   ;
                commThread=NULL;
        }

使用特权

评论回复
14
lium| | 2010-8-19 22:36 | 只看该作者
蓝屏是USB驱动造成的,   是ReadFile的参数有误或驱动本身有问题.

使用特权

评论回复
15
llia|  楼主 | 2010-8-19 22:47 | 只看该作者
问题解决,   问题出在线程结束时.

使用特权

评论回复
16
llia|  楼主 | 2010-8-19 22:47 | 只看该作者
如果清理工作放在析构函数里   在某些很极端的情况下   可能会出问题     放在OnTerminate事件里还是好一些   .


不知道大家遇到过这样的问题没有

使用特权

评论回复
17
linqing171| | 2010-8-20 12:24 | 只看该作者
codeguard,一直开着。

另外,蓝屏 是由于出现了内核级的Exception(不要告诉我你用bcb,从来不知什么是try),
而你bcb的程序是运行在用户态的,即使有异常,TApplication里面和Main函数里面都有try。
即使你在最外层直接调用了Abort,windows也会替你catch住,比如常见的“该程序执行了非法操作,如有任何问题,请和...." 和 ”尝试读取地址0x00000004“ 或者.....

只有驱动等在高权限执行的,windows会扑捉到并 用一个蓝色背景的屏幕给你打印出来异常信息。

至于楼上的几位说的析构什么的,只要是对于事件逻辑清晰,不会有问题,即使有问题,也不会蓝屏。
楼主如果不信,可以直接调用Application->Terminate推出应用程序,让windows替你释放你没有释放的内存,以此来证明和析构没有关系。

综上所述,BCB做的程序不会蓝屏。

根据俺这几年做的一些驱动经验,大多是驱动问题。

使用特权

评论回复
18
mxh0506| | 2010-8-20 16:43 | 只看该作者
codeguard,一直开着。

另外,蓝屏 是由于出现了内核级的Exception(不要告诉我你用bcb,从来不知什么是try),
而你bcb的程序是运行在用户态的,即使有异常,TApplication里面和Main函数里面都有try。
即使你在最外 ...
linqing171 发表于 2010-8-20 12:24
这才是正确的解释

使用特权

评论回复
19
阿毛| | 2010-8-25 12:37 | 只看该作者
建议最简单的方法,查看任务管理器,盯住进程内存使用那项,大概就能看出来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝