为什么我的程序运行 易导致系统蓝屏呢??

[复制链接]
1475|24
 楼主| zyf部长 发表于 2017-3-28 22:58 | 显示全部楼层 |阅读模式

为什么我的程序运行   易导致系统蓝屏呢??
是不是   内存益出   泄露等原因导致的??
zwll 发表于 2017-3-28 23:00 | 显示全部楼层
还有什么现象?能再详细描述下吗?
 楼主| zyf部长 发表于 2017-3-28 23:02 | 显示全部楼层
另:C++BUILDER   是否有工具检查系统是否有内存泄露
stly 发表于 2017-3-28 23:05 | 显示全部楼层
这个不好说

C++BUILDER自带的CodeGuard工具就可检查内存泄露
llljh 发表于 2017-3-28 23:06 | 显示全部楼层

CodeGuard可以内存检测


如果是每次都如此   就好检测了
每次注销掉一句代码
看看那句出了问题
就OK了
慢慢得查
 楼主| zyf部长 发表于 2017-3-28 23:08 | 显示全部楼层
能说说是什么语句造成的么?   好像WIN2K以后的系统很难弄蓝屏,我还特意试了半天,晕~~
 楼主| zyf部长 发表于 2017-3-28 23:09 | 显示全部楼层
操作系统是XP,有时候下标越界就可能蓝屏,这次是USB通信这块出问题了
renyaq 发表于 2017-3-28 23:11 | 显示全部楼层
xp系统蓝屏幕..我碰到过一次,不过不是因为程序
我记得我以前用过清华紫光拼音输入法2.0
用了段时间后系统就蓝了提示0xxxxx   error   云云
supernan 发表于 2017-3-28 23:14 | 显示全部楼层
后来据说是什么   常用字库不断膨大造成的
那是我唯一碰到过的情况,平时程序错误,多是异常退出   然后发送报告还是不发送之类的

那么类似的,是否是什么地方   比如某个循环里面   内存不断扩张
liuzaiy 发表于 2017-3-28 23:17 | 显示全部楼层
嗯,USB通信的确可以造成蓝屏(偶们公司的一个USB设备就老是这样)

不过偶没做过这方面的东东
yinxiangh 发表于 2017-3-28 23:18 | 显示全部楼层
蓝屏幕是 windows的最后一道 Exception 捕捉。
内核里面的异常,一般都是windows捕捉的,你用C++ Builder ,调用驱动了?
如果是驱动里面的错误,Code Guard是无法知道的,它只能告诉你你的代码里面哪个指针异常了。
chenjunt 发表于 2017-3-28 23:20 | 显示全部楼层

建议你还是远程调试,用C++ Builder 带的Remote Debugger, 拿另外一台电脑来单步调试看看。
morrisk 发表于 2017-3-28 23:22 | 显示全部楼层
我也遇到过类似问题有可能是你的DLL里面调用的问题,或是内存益出,好好的调试一下就可以了
xxmmi 发表于 2017-3-28 23:24 | 显示全部楼层
驱动是性片公司提供的,需要用到   READFILE   WRITEFILE   等   东西和DDK

现在基本上可以确定   是USB   通信时   线程里读取   数据时出问题了(READFILE   出问题)
kangzj 发表于 2017-3-28 23:25 | 显示全部楼层
写APP能blue screen的也是高手了,呵呵。

以前折腾WDM的时候,每天蓝屏N次的调试,多亏是公司的电脑不心疼硬盘。
 楼主| zyf部长 发表于 2017-3-28 23:27 | 显示全部楼层
_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;
 楼主| zyf部长 发表于 2017-3-28 23:29 | 显示全部楼层

这是结束线程
if   (   commThread   )
        {
                commThread-> Terminate()   ;
                commThread=NULL;
        }
zwll 发表于 2017-3-28 23:31 | 显示全部楼层
蓝屏是USB驱动造成的,   是ReadFile的参数有误或驱动本身有问题.
 楼主| zyf部长 发表于 2017-3-28 23:32 | 显示全部楼层
问题解决,   问题出在线程结束时.
juventus9554 发表于 2017-3-28 23:34 | 显示全部楼层
如果清理工作放在析构函数里   在某些很极端的情况下   可能会出问题     放在OnTerminate事件里还是好一些   .


不知道大家遇到过这样的问题没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部