Windows系统内存分配失败原因分析及解决方案详解

【第一条】

Windows系统内存分配失败原因分析及解决方案详解

使用 Windows 操作系统的人有时会遇到如下错误消息:

如果你向一些“专家”寻求建议,你得到的答案往往是诸如“Windows这么不稳定”之类的愤慨和不屑。事实上,这个错误并不一定是Windows不稳定造成的。本文将简要分析该错误的常见原因。

1. 应用程序未能检查内存分配。

当程序需要一块内存来存储数据时,需要使用操作系统提供的“函数功能”来申请。如果内存分配成功,函数会将新开辟的内存区域的地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址就是编程中的“光标”。内存并不总是可用且取之不尽用之不竭,有时内存分配会失败。当分配失败时,系统函数将返回值0。此时,返回值“0”不再表示新启用的游标,而是系统向应用程序发送的通知,通知应用程序发生了错误已经发生了。作为应用程序,每次申请内存后都应该检查返回值是否为0。如果是,则说明出现了故障,需要采取一些措施来挽救。这增强了程序的“鲁棒性”。如果应用程序没有检查这个错误,它就会认为这个值是根据“思维惯性”分配给它的可用游标,并在后续执行中继续使用这块内存。地址0处的真实内存区域存放着计算机系统中最重要的“中断描述符表”,应用程序绝对不允许使用它。在没有保护机制的操作系统下(如DOS),向该地址写入数据会立即崩溃。然而,在一个健壮的操作系统中,比如Windows,这个操作会立即被系统的保护机制捕获,结果就是出错的应用程序被操作系统强行关闭,以防止其错误扩大。这时就会出现上述“写内存”错误,指出引用的内存地址为“0x00000000”。内存分配失败的原因有很多。内存不足、系统功能版本不匹配等都可能产生影响。因此,这种分配失败多见于操作系统使用时间较长、安装了多种应用程序(包括无意中“安装”的病毒程序)、大量的系统参数和系统文件后。被改变。

2、应用程序由于自身的bug,引用了异常的内存游标。

在使用动态分配的应用程序中,有时会出现这样的情况:程序试图突然读写一块“应该可用”的内存,但由于某种原因,预期的可用游标已经过期。可能是它“忘记”向操作系统请求分配,也可能是程序本身在某个时刻没有“注意”而注销了这块内存等等。未注册的内存被系统回收,其访问权限不再属于应用程序。因此,读写操作也会触发系统的保护机制。试图“非法”的程序的唯一命运就是被操作终止,并且所有资源都将被回收。计算机世界的法律还是比人类的法律有效、严格得多!像这样的情况都是程序本身的bug,你经常可以通过特定的操作顺序重现错误。无效光标并不总是0,因此错误信息中的内存地址不一定是“0x00000000”,而是其他随机数。如果系统经常出现上述错误消息,以下建议可能会有所帮助:

1、检查系统是否存在木马、病毒。此类程序常常不负责任地修改系统以控制它。

这会导致操作系统异常。您应时刻加强信息安全意识,切勿对来历不明的可执行程序感到好奇。

2、更新操作系统,让操作系统安装程序重新复制正确版本的系统文件并更正系统参数。

有时操作系统本身可能存在Bug,所以一定要安装官方的升级程序。

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

模式:

更换虚拟内存

回答:

到目前为止,这是确定的。也就是说,如果下次寒冷天气到来时不再出现这种情况,则说明这是主要原因。

附加:

如果使用Ghost恢复操作系统,建议删除WINDOWS\PREFETCH目录下的所有*.PF文件,因为Windows需要重新收集程序的物理地址。

某些应用程序错误“0x7cd64998”指令引用“0x14c96730”内存。由于这个原因,该内存无法被“读取”推断

起源:

Win XP的“预读”技术

这种优化技术也应用于应用软件中。系统分析每个应用程序软件的前几次启动,然后添加一个描述应用程序需求的虚拟“内存映像”,并将此信息存储在WINDOWSPREFETCH Data文件夹中。创建映像后,应用程序软件的加载速度会更快。 XP的预取数据存储了最近8次系统启动或应用软件启动的信息。

后来的叙述:

目前这种方法在网上也是独一无二的(代码已经研究这个问题很久了),也是一个普遍的问题。本来,有些程序几乎每天睡觉前关闭软件时都会出现……读……

现在这种情况不再发生了。

【第二条】

运行某些程序时,有时会出现内存错误信息(0x后面的内容可能不同),然后程序会被关闭。

不知道你是否也经历过类似的失败?

一般来说,出现这种现象有多种原因。一是硬件,就是内存问题,二是软件,问题很多。

我们先来说说硬件:

一般来说,内存出现问题的可能性并不高。主要方面有:内存条坏了、内存质量有问题、两种不同品牌、不同容量的内存混用,也比较容易造成不兼容。 ,还要注意散热问题,尤其是超频后。可以使用MemTest软件对内存进行测试,可以彻底检测内存的稳定性。

如果你有双内存,并且混用了不同品牌的内存条或者购买了二手内存,出现了这个问题,那么你需要检查内存是否有问题或者与其他硬件不兼容。

如果没有,则对软件进行故障排除。

先简单说一下原理:内存中有一个地方用来存储数据,称为缓冲区。当程序将数据放入某一位置时,由于空间不足,就会发生溢出。例如:一个水桶只能装一公斤水。当你放入两公斤水时,它就会溢出。该系统显示在屏幕上。这个问题经常出现在windows 2000以上的情况下。另外,也可能是硬件设备之间兼容性不好造成的。

我通过几个例子给大家分析一下:

例1:打开IE浏览器或几分钟后,就会出现“0x70dcf39f”命令引用的“0x00000000”内存。该内存无法被“读取”。要终止程序,请单击“确定”消息框。单击“确定”后,出现消息框“发生内部错误,您正在使用的窗口之一即将关闭”。关闭提示信息后,IE浏览器也关闭。解决方法:修复或升级IE浏览器并打补丁。我见过的一种修复方法是Win2000自我升级,即从Win2000升级到Win2000。其实这个方法就是将系统恢复到初始状态。例如,如果您的IE升级到6.0,则升级后将替换为IE5.0。

例2:在Windows XP下双击光盘中的“AutoRun.exe”文件,会显示“0x77f745cc”命令引用的“0x00000078”内存。内存不能被“写入”。要终止该程序,请单击“确定”,但它在Windows 98中运行正常。 解决方案:这可能是系统兼容性问题。对于winXP系统,右键单击“AutoRun.exe”文件,属性,兼容性,选择“以兼容模式运行此程序”项,选择“Windows 98/Me”。如果win2000打了SP补丁,直接启动运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键单击,属性和兼容性选项也会出现。

示例3:RealOne Gold 关闭时发生错误。之前一直使用正常,但是最近每次关闭都会出现“0xffffffff”命令引用的“0xffffffff”内存。内存不能被“读取”。解决方案:当使用的输入法是微软拼音输入法2003并且语言栏被隐藏时(不隐藏时没有问题),关闭RealOne时就会出现此问题。因此,在关闭RealOne之前,可以显示语言栏或显示任何其他输入法。作为目前的输入法来解决这个问题。

例4:我的英雄超级解霸上线后无法玩。每次提示“0x060692f6”(每次更改)时,该命令引用的“0xff000011”内存都无法“读取”。请单击“确定”终止程序。解决方案:尝试重新安装英雄超级解霸。如果重装后问题依然存在,请前往官网下载对应版本的补丁后尝试。如果还是不行,我就得换个播放器试试。

示例 5:双击游戏快捷方式。 “0x77f5cd0”命令指的是“0xffffffff”内存。该内存无法“读取”,提示Client.dat程序错误。解决方案:重新安装显卡最新驱动程序,然后下载并安装DirectX9.0。

例6:朋友发消息,我的电脑出现错误信息:“0x772b548f”命令引用的“0x00303033”内存无法“写入”。然后QQ自动下线了,当我再次打开QQ时,我发现他发了十几条消息。解决办法:这是对方使用QQ,发送特殊代码,导致QQ出错的BUG。只要打个补丁或者升级到最新版本就可以了。

【原因及解决方法】

1、内存条坏了。更换内存模块。

2.双内存不兼容。使用相同品牌的内存或仅使用一种内存。

3、内存质量问题。更换内存模块。

4 散热问题:加强机箱内部散热

5 内存和主板没有插好或者其他硬件不兼容。重新插入内存或更换插槽。

6. 如果硬件有问题,请更换硬盘。

7 驱动问题:重新安装驱动。如果是新系统,应先安装主板驱动程序。

8 如果软件损坏请重新安装软件

9.如果软件有BUG,请修补或更新到最新版本。

10 软件与系统不兼容。给软件打补丁或者尝试系统兼容模式。

11 软件之间存在冲突。如果您最近安装了任何新软件,请尝试将其卸载。

12 如果使用其他相关软件时出现该软件问题,请重新安装相关软件。例如,播放某种格式的文件时出现错误。该文件的解码器可能有问题。

13 杀毒软件解决病毒问题

14 防病毒软件与系统或软件冲突。由于杀毒软件进入底层监控系统,可能会与某些软件发生冲突。尝试卸载它。

15 系统本身存在问题。有时候操作系统本身也会有BUG。注意安装官方更新程序,例如SP补丁。最好应用它。如果还是不行,重装系统或者更换其他版本的系统。

[另一条评论]

在控制面板的“添加/删除程序”中检查是否安装了Microsoft NET.Framework。如果已安装,请考虑将其卸载。当然,如果以后在其他程序中需要NET.Framework,可以重新安装。

另外,如果您使用的是ATI显卡并且使用的是SP2补丁(部分ATI显卡驱动需要NET.Framework才能正常工作)。在这种情况下,您可以找到不需要 NET.Framework 支持的 ATI 图形驱动程序。

如果以上两种方法都不能彻底解决问题,可以尝试使用“IE修复”软件,检查是否有病毒等。

【Microsoft NET.Framework升级到1.1版本应该没问题】

[还有一件事]

方法一:

微软新闻组朋友的提示:开始--运行:regsvr32 jscript.dll

开始--运行:regsvr32 vbscript.dll

但没有解决办法——但它提供了一种方法——运行一次注册所有dll

搜索方法如下:

运行并输入cmd并按Enter键进入命令提示符。

对于 (%windir%\system32\*.dll) 中的 %1 执行 regsvr32.exe /s %1

兄弟,请慢慢输入这个命令。如果输入正确,您将看到屏幕快速滚动。不然……不然的话,失败了也不会有这个效果。按 Enter 后,慢慢等待(需要 1-2 分钟),然后打开它,看看是否一切都在运行。

方法二:

这是一个典型的问题~~~~造成这个问题的原因有很多。一般来说,解决问题的方法有三种:给系统打补丁、更换内存、更换内存插槽。 【系统补丁可在Microsoft Update网站在线更新】

造成这个问题的原因有很多。你不能得出简单的结论。尝试执行以下几点可能会对您有所帮助:

1.确保您使用的是未经修改的软件(非中文、破解版)

2、使用修改后的软件时尽量不要运行其他软件。 (这是临时文件,有些软件也可能使用临时文件夹,所以会造成干扰)

3. 关闭所有这些桌面工具和内存管理工具(您至少有 2 个类似的工具正在运行)。”

加工方法:

运行regedit进入注册表。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks 下应该只有一个正常键值“{AEB6717E-7E19-11d0-97EE-00C04FD91972}”,删除其他键值。

【我个人的最终解决方案和意见】

今天尝试了多种方法,最后发现问题出在微软的NET.Framework上。我升级了软件并应用了所有补丁。短暂的安心之后,却出现了“内存无法读取”的情况。后来受上面文章的启发,我卸载了微软的NET.Framework1.0和1.1,天下太平了。

另外:如果在打开“我的电脑”、“我的文档”等时出现上述情况,还有一种可能是你的右键菜单过于臃肿。这时候只要清理一下右键菜单,问题就解决了。

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

[测试结果]

上面最有效、最彻底的方法是这样的:

运行并输入cmd并按Enter键进入命令提示符。

对于 (%windir%\system32\*.dll) 中的 %1 执行 regsvr32.exe /s %1

【提示】如果您害怕输入错误,可以复制此命令,然后单击命令提示符框左上角的c:\。使用下面的“编辑-粘贴”功能可以更容易出错。快速滚动完全停止后,不要急于启动其他程序。耐心等待一段时间,因为此时DLL还在找位置。在灯停止闪烁之前不要执行任何其他操作。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

85阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读