qt的程序异常退出怎么办?

qt的程序异常退出怎么办?,第1张

Qt程序异常终止的原因:

一、在使用指针之前,要进行指针是否为null的判断,如果为NULL却直接使用该指针,就会异常终止。如在QTableView:

QStandardItemModel *model = new QStandardItemModel

model->item(0,1)->text()

单元格没编辑过,直接用 model->item(0,1)->text() 的话,程序会异常终止。

二、析构函数中加入释放内存的delete代码后,关闭Qt应用程序,会出现程序异常终止,去掉析构函数里delete的代码就没有问题了。我是在工程中额外添加一个继承自QTableView的Qt设计师界面类,并在ui_widget.h中,即widget.ui界面的源码中,将QTableView改为我这个添加的类的类名。在新建的类的cpp文件中,注释掉

,ui(new Ui::CTblView)

ui->setupUi(this)

两行,但没有注释掉

delete ui

原因和第一点一样,ui定义了没有使用,就直接delete,故而导致程序异常终止。也注释掉这行就正常了。

三、指针对象没有实例化就进行引用

如:

Dialog *dd = new Dialogd->show()如果忘了第二行的实例化,也会导致Qt程序异常终止。

用g了,或者中了病毒!那是一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

1、微软IE缓冲溢出漏洞引起

2、内存或虚拟内存地址使用冲突造成 程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给新的程序使用,win是多任务的系统 有时前程序未结束 又有新的任务开始 到底要多少内存或虚拟内存来保证我们同时运行的工作任务呢?也许win在这个问题上没弄好,所以有此错误常常发生,一般运行大型软件或多媒体后出现这种情况

3、劣质内存条也会出现这个问题

一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。

4、微软WINDOWS系统的漏洞,

windows把内存地址0X00000000到0X0000ffff指定为分配null指针的地址范围,如果程序试图访问这一地址,则认为是错误。c/c++编写的程序通常不进行严格的错误检查,当采用malloc来分配内存而可供分配的地址空间不够的情况下返回null指针。但是代码不检查这种错误,认为地址分配已经成功,于是就访问0X00000000的地址,于是就发生内存违规访问,同时该进程被终止。

ASCII字符填充组成的pif文件时会出现以下情况:

一个非法的pif文件(用ascii字符'x'填充)至少要369字节,系统才认为是一个合法的pif文件,才会以pif的图标[pifmgr.dll,0]显示,才会在属性里有程序、 字体、内存、屏幕”等内容。而且仅仅当一个非pif文件的大小是369字节时察看属性的“程序”页时,不会发生程序错误,哪怕是370字节也不行。当对一个大于369字节的非法pif文件察看属性的“程序”页时,Explorer会出错,提示:'***'指令引用的'***'内存。该内存不能为'read' ,问题出在pif文件的16进制地址:

0x00000181[0x87]0x00000182[0x01]和

0x00000231[0xC3]0x00000232[0x02]

即使是一个合法pif文件,只要改动这四处的任意一处,也会引起程序错误。而只

要把0x00000181和0x00000182的值改为[0xFF][0xFF],那么其它地址任意更改

都不会引起错误。

5、可能没有完全正确安装apache服务,且启动了它的原故把服务中的 OracleOraHomeXXHTTPServer改成停止

6、应用程序没有检查内存分配失败

程序需要一块内存用以保存数据时,就需要调用 *** 作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。

内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。

若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的 *** 作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的 *** 作系统中,如Windows等,这个 *** 作会马上被系统的保护机制捕获,其结果就是由 *** 作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。

内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于 *** 作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。

7、应用程序由于自身BUG引用了不正常的内存指针

在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向 *** 作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写 *** 作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被 *** 作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!

像这样的情况都属于程序自身的BUG,你往往可在特定的 *** 作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。

----------------------------------------------------------

如果系统经常有所提到的错误提示,下面的建议可能会有帮助:

1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致 *** 作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。

2.更新 *** 作系统,让 *** 作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候 *** 作系统本身也会有BUG,要注意安装官方发行的升级程序。

3.试用新版本的应用程序。

4、删除然后重新创建 Winnt\System32\Wbem\Repository 文件夹中的文件:

在桌面上右击我的电脑,然后单击管理。

在"服务和应用程序"下,单击服务,然后关闭并停止 Windows Management Instrumentation 服务。

删除 Winnt\System32\Wbem\Repository 文件夹中的所有文件。(在删除前请创建这些文件的备份副本。)

打开"服务和应用程序",单击服务,然后打开并启动 Windows Management Instrumentation 服务。当服务重新启动时,将基于以下注册表项中所提供的信息重新创建这些文件:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Autorecover MOFs

[url= http://www.55188.com/viewthread.php?tid=627383&fpage=1&highlight=] http://www.55188.com/viewthread.php?tid=627383&fpage=1&highlight=[/url]

下面我从几个例子给大家分析:

例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。 解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替。

例二:在windows xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。 解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。

例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为“read” 的提示。 解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。

例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“0x060692f6”(每次变化)指令引用的“0xff000011”内存不能为“read”,终止程序请按确定。 解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。

例五:双击一个游戏的快捷方式,“0x77f5cd0”指令引用“0xffffffff”内 存,该内存不能为“read” ,并且提示Client.dat程序错误。 解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。

例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0x772b548f”指令引用的“0x00303033”内存,该内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。 解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。

进入安全模式将最近安装软件卸载

电脑上正在运行的某些应用程序或服务可能会导致 Windows 资源管理器停止工作

如果可以在正常的进入系统状态下,卸载最近安装的驱动,如果无法在正常进入系统界面卸载,就需要进入安全模式,将最近安装的软件卸载。

windows10安全模式如何进入:windows10系统如何进入安全模式

windows7安全模式如何进入:开机后,一直不停的按F8(对,一开机,立即就点,要快点,是不断的点F8)。

如果进入安全模式卸载一些软件,还是报资源管理器停止工作,还要以将电脑还原到“最近一次的正确配置(高级)”。(还原到最近一次的正确配置(高级),电脑里面的数据是不会丢的)

02

视频驱动程序故障

你可能使用的是已过时或已损坏的视频驱动程序。

已过时或已损坏的视频驱动程序可能导致 Windows 资源管理器停止工作。 下载并安装最新的视频驱动程序可解决大部分此类问题。

03

视频文件,音频文件过多

可能是文件交中存放的视频或者音频文件过多,打开文件夹的时候系统会预览文件,从而导致CUP利用率瞬间暴涨,使得explorer停止工作。

04

系统文件损坏

电脑上的系统文件可能已损坏或与其他文件不匹配。

使用系统文件检查器扫描电脑是否有丢失或损坏的文件。 为此,请按照下列步骤 *** 作:

1.单击“开始”,然后在附件中找到“命令提示符”,右键“以管理员身份运行(A)”

2.单击“以管理员身份运行”, 系统可能会提示你键入管理员帐户的密码。

如果你是管理员,请单击“是”,或者键入管理员密码,然后单击“是”,继续。

3.在命令提示符下,键入 Sfc /scannow,然后按 Enter。

扫描可能需要一些时间,因此请耐心等待。 Windows 会修复发现的所有损坏或丢失的文件。 如果需要安装 CD 的信息来修复问题,系统可能会提示你插入 Windows CD。

05

电脑上可能存在病毒或恶意软件感染

病毒和恶意软件感染可能会导致应用程序性能问题。 使用你最喜爱的防病毒软件扫描可能隐藏在电脑中的任何感染。

06

启动电脑检查是否有问题启动项

电脑正常进入系统后,windows+R键,打开运行,在运行中输入msconfig

找到不需要,或者可疑的启动软件,将前面勾去掉。重新启动电脑后,就不会自动加载启动相关软件了。

07

测试系统的 RAM 内存

有时出现故障的 RAM(随机访问内存)可能会导致 Windows 内出现不稳定问题。 通过单击“开始”使用 Windows 内存诊断工具,键入“内存诊断”,然后在列表中选择结果。 出现“Windows 内存诊断工具”窗口时,选择“立即重新启动并检查问题(推荐)”。

1.打开控制面板,点击“系统和安全”。

2.打开系统和安全窗口,找到并点击打开“管理工具”。

3.打开的管理工具窗口,找到并双击“Windows内存诊断”。

08

损坏的图像

损坏的图像有时可能导致 Windows 资源管理器问题。 如果使用图片或浏览包含图片的文件夹时 Windows 资源管理器停止工作,则可能有一个或多个图片文件已损坏。 若要测试有无此问题,请按照下列步骤 *** 作:

1.单击“开始”,然后单击“计算机”。

2.单击“组织”,然后从下拉列表中选择“文件夹和搜索选项”。

3.在“文件夹选项”窗口中,单击“查看”选项卡。

4.勾选“始终显示图标,从不显示缩略图”选项。

5.取消勾选“在缩略图上显示文件图标”选项。

6.单击“确定”关闭“文件夹选项”窗口。

现在,转到包含图片或视频的任意文件夹,并查看是否可以重现此问题。 如果 Windows 资源管理器确实停止工作,则你所查看的文件夹可能包含一个或多个已损坏或包含损坏的缩略图数据的图片文件。

注意: 将选项调整为“在缩略图上显示文件图标”和“始终显示图标,从不显示缩略图”后,文件不再显示缩略图,因此图片和其他文件将显示为对应文件类型的默认图标。 如果可以在设置这些选项后重现错误,则问题与图片或视频无关,应将“文件夹”选项返回其原始设置。

09

查看此错误的详细信息

查看此错误的详细信息以确定导致 Windows 资源管理器停止工作的应用程序。 为此,请按照下列步骤 *** 作:

单击“开始”,在“搜索”区域中键入“ *** 作中心”,然后从返回列表中单击“ *** 作中心”

在“ *** 作中心”窗口中,依次单击“维护”、“查看可靠性历史记录”,然后单击“可靠性监视程序”窗口底部的“查看所有问题报告”

向下滚动到“Windows 资源管理器”项目列表

双击“已停止工作”以查看技术详细信息,然后记录技术详细信息。

通过详细信息,去网上查看解决方案。

10

重新安装系统

如果上述解决方案未解决此问题,多数需要重新安装系统了。

11安装系统后还出现这个问题

如果重新安装系统后,还出现这个问题,那多数有可能是硬件故障导致,硬盘,或内存等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12036651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存