使用Windows *** 作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。
一、应用程序没有检查内存分配失败
程序需要一块内存用以保存数据时,就需要调用 *** 作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。
若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的 *** 作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的 *** 作系统中,如Windows等,这个 *** 作会马上被系统的保护机制捕获,其结果就是由 *** 作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于 *** 作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。
二、应用程序由于自身BUG引用了不正常的内存指针
在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么码册,这个预料中可用的指针已经失效了。有可能是“忘记了”向 *** 作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写 *** 作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被 *** 作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!
像这样的情况都属于程序自身的BUG,你往往可在特定的 *** 作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。
如果系统经常有所提到的错误提示,下面的建议可能会有帮助:
1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致 *** 作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。
2.更新 *** 作系统,让 *** 作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候 *** 作系统本身也会有BUG,要注意安装官方发行的升级程序。
3.试用新版本的应用程序。
运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。
“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
不知你出现过类似这样的故档并障吗?(0x后面内容有可能不一样。)
一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。
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
呵呵,楼上说的够详细的啦,不过我补充一句:环境变量的设置(教人要教最关键的)。拍含兄jdk的东西,初学不需要精通,知道它是用来做java开发的就可以了。
设置环境变量:
1.首先,我们要安装jdk,呵呵,注意你的安装目录,最好自定义一下,以后好找,别到最后了,连安装到哪里都不知道。好像它会自动先安装jdk,安装好后,提示你安装jre。都安装上,同一个目录下就可以。如:我的安装目录是:D:\programer\Java。在这个目录下会有你刚才安装的jdk和jre,并且都标示有版本号,我的是:1.5的。不过,道理一样。
2.配置你的环境变量:有3个值需要配置。右键点击“我的电脑”—》“属性”—》“高级”—》“环境变量”—》单击“系统变量”下的“新建”按钮,依次新建“classpath”“java_home”“path”环境变量,他们的值分别为:
java_home=D:\programer\Java\jdk1.5.0_06
classpath=.\D:\programer\Java\jdk1.5.0_06lib\tools.jarD:\programer\Java\jdk1.5.0_06\lib\dt.jarD:\programer\Java\jdk1.5.0_06\jre\lib
path=D:\programer\Java\jdk1.5.0_06\bin (如果你的电脑已经有了path系统变量,则直接在后面加上这个值即可)
以上3值的设定,请注意比较我的安装路径。千万不要直接照抄!
3、测试jdk的安装:
“开始”—》“运行”—》输入“cmd”进入DOS—》分别输入“java”和“javac”
如出现一系列参数,则,安装正常……
4.其实,你要进行java的开发,仅有jdk,虽然可以,但不方便,建议安装eclipse,并且使用myeclipse,我的理解是myeclipse是eclipse的一个插件,如果有问题,问我。安装myeclipse时,如果你的电脑主题使用了别的,或是使用了美化包,建议全部关闭,使之成为最原始的windows经典主题。否则,会死翘翘滴。。。。。安装完后,主题可以再变回来,如果你要进行桌面程序的开发如:使用SWT+JFACE,建议还是使用默认的windows经典主题,否则,设计界面会有问题。
呵呵,干脆,我把关于java所需要的一些列软件的安装,都告诉你吧,看样你是初学java。这样会使你的学习过程比较有乐趣,想当年,我一个人研究的myeclipse的平台,连个帮我的人都没有,那个迷茫,那个郁闷,我都想放弃了。这可是当年搞定myeclipse时保存下来的心得,全部给你把。有问题找我。具体软件的下载,你袭袭老碰先自己找找看吧,对了,你的E文好吗?
要去官方网站上下,或是使用myecli自带的help_>help contents里面自己找。建议先使用我推荐的版本,然后自己熟了,在逐渐摸索。
一、tomcat的安装和配置
1、安装版本:jakarta-tomcat-5.0.28.exe (core版)
2、配置系统环境变量:
设:我的安装路径为:D:\programer\Tomcat 5.0
则:右键点击“我的电脑”—》“属性”—》“高级”—》“环境变量”—》单击“系统变量”下的“新建”按钮,新建“tomcat_home”环境变量,它的值为:
tomcat_home=D:\programer\Tomcat 5.0
以上值的设定,请注意比较我的安装路径。
3、测试运行tomcat的安装:
可直接双击托盘内tomcat的小图标,或到安装目录下找到“tomcat5w.exe”,双击,即可d出tomcat的运行界面。他的路径为D:\programer\Tomcat 5.0 \bin\tomcat5w.exe
测试:打开ie,输入“http://localhost:8080”,其中,8080是默认的端口号。会看到tomcat的主界面,也就是控制面板,搞定它是门大学问。暂时不在此讲解
三、eclipse的安装和配置
1、安装版本:eclipse-SDK-3.1.2-win32.zip 这里说安装不准确,应该说是解压。解压到你的指定目录。
2、link安装方法:
建议在安装eclipse插件时,使用此方法。
使用link安装方法的先决条件:
(1)、 插件的解压缩文件的根目录必须为:*:\eclipse\……
(2)、在解压好的eclipse目录中建立一个文件包,包名随意。设我的eclipse安装目录为:D:\programer\eclipse则我新建的包的目录为: D:\programer\eclipse\links,其中links就是我新建的包。
(3)、为安装的各种eclipse插件,新建link文件,这种文件的后缀名可随意,但我建议使用link做后缀。用记事本打开,并写入:
path=……,具体值在下面介绍。注意自己总结规律。
3、语言包的安装:建议在刚接触时使用,熟悉eclipse的开发环境后,立即删除,因为,如果你不懂e文,就别想在软件这一行混了……安装时要注意版本,我的版本是:NLpack-eclipse-SDK-3.1.x-win32.zip。所有eclipse的插件安装,都必须注意版本号!
我们使用link安装方法,安装我们的语言包,同样是解压,建议你新建一个专门用于存放各类插件解压文件的文件包,我的为:D:\links。
在D:\links下,新建language文件包,将NLpack-eclipse-SDK-3.1.x-win32.zip解压到此文件包内,注意,这时的language文件包的根目录就是:eclipse。(这样表述 可能不正确……o(∩_∩)o),然后在D:\programer\eclipse\links中建立语言包的link文件,我的为:language.link。用记事本打开,并写入: path=D:\\links\\language至于为什么这样写,大家都是聪明的孩子,不用我多说了吧!
4、测试eclipse及语言包的安装:
打开eclipse,会发现你的已是中文。ok!
5、如果不行,到Eclipse安装目录Configuration子目录下,找到org.eclipse.update文件包,靠!就是它搞得鬼,很简单,删掉,然后重新启动。
6、说明:
(1). 插件可以分别安装在多个自定义的目录中。
(2). 一个自定义目录可以安装多个插件。
(3). link文件的文件名及扩展名可以取任意名称,比如ddd.txt,myplugin都可以。
(4). link文件中path=插件目录的path路径分隔要用\\或是/
(5). 在links目录也可以有多个link文件,每个link文件中的path参数都将生效。
(6). 插件目录可以使用相对路径。
(7). 可以在links目录中建立一个子目录,转移暂时不用的插件到此子目录中,加快eclipse启动。
(8). 如果安装后看不到插件,把eclipse 目录下的configuration目录删除,重启即可。
四、tomcat插件的安装和配置:
1、安装版本:tomcatPluginV3.zip,同样是解压,直接解压到eclipse安装目录下的/plugins子目录下即可。
2、tomcat的配置:
启动eclipse,选择“窗口”—》“首选项”,你会左面发现多了个“tomcat”,点它,在右面设置tomcat和tomcat_home,我就分别为你的安装版本和安装路径。我的为“version 5.x”和“D:\programer\Tomcat 5.0”,点“应用”。
然后,点开左面的tomcat,找到“advanced”,设置“tomcat base”,也是你的tomcat的安装路径。点“应用”
点“确定”,关闭。
五、Myeclipse的安装和配置
1、安装版本:MyEclipse4.1.1 for Eclipse3.1.X,在安装过程中,自动提示“please choose existing eclipse installation folder”也就是你的eclipse的安装目录。
2、进入你的eclipse安装目录,会发现多了一个ico的logo,就是它,其实myeclipse只是eclipse的一个插件……
3、启动eclipse,在“首选项”中有多了一个“myeclipse”,恭喜你,安装成功了
4、配置:
添加tomcat到myeclipse,天啊,d出窗口要我输入注册码,大家都是穷程序员,给大家个注册码:
MyEclipse 5.0 M2 for Eclipse 3.2
Subscriber: www.1cn.biz
Subscriber Code: jLR8ZC-444-55-4467865481680090
MyEclipse4.1.1GA for Eclipse3.1.X
License name: hehe
License Key: uLR8ZC-956-55-5467865991428004
MyEclipse3.8.4 for Eclipse3.0.X
iwdc
vAR7ZL-819-56-5467865451894096
hello
uAR7ZL-819-56-54678656892787632
csdn
pAR7ZL-819-56-5467865261354715
还是进入“首选项”,左边找到“myeclipse”—》“application servers”—》“tomcat5”,下面就是输入你的安装路径,点“应用”、“确定”。
六、搞定!
兄弟,还有,你给的分是不是有点。。。。呵呵!
关于 SVG ViewerAdobe SVG Viewer 支持 2000 年 11 月 2 日发布的 Candidate Recommendation SVG 规范草案中的大部分功能。请记住该规范仍在发展中,并且将继续完善直至成为被推荐的规范。
如何安装 SVG Viewer
安装前,请关闭所有用旧版本增效工具来查看 SVG 的应用程序。
运行安装器。最新发布的安装器可以从 http://www.adobe.com/svg/viewer/install下载。.
如何复制 Netscape 增效工具到其它浏览器
如果您安装的是另一份 Netscape 增效工具支持的 Netscape 或 Internet Explorer,您可以复制以下文件到您的增效工具文件夹,从而可以直接从该陪仔亩浏览器查看 SVG:
NPSVGVw.dll
SVGView.dll
SVGViewer.zip
如何在您的网页浏览器中查看 SVG 文件
只要您安装了 Adobe SVG Viewer,您就可以在任何受支持的网页浏览器中查戚派看从 Illustrator 导出的 SVG 文件。
如何将作品转换入 SVG
您可以从 Illustrator 9 导出 SVG。您可以在 Illustrator 中创建自己的作品,将其作为 SVG 导出,然后在为其添加 JavaScript 交互 *** 作、动画、或滤镜效果。
提示和建议
“样式”属性(或使用实体引用的样式属性)比内嵌样式表的渲染速度更快。
在滤镜元素的 x、y、宽度和高度 等属性使用紧凑的百分比,这样可以尽可能地缩小滤镜需要计芦森算的区域。这极大地提高了图形的显示速度。
您通过对传递进来的evt对象调用getTarget函数即可从 SVG 时间处理程序恢复 SVG 文件对象。例如:
// Retrieve the SVG document object:
var directTarget = evt.getTarget()
var svgDocument
if( directTarget.getNodeType() != 9 ) // if not DOCUMENT_NODE
svgDocument = directTarget.getOwnerDocument()
else
svgDocument = directTarget
http://wxs.suyiping.com/kangjia/SOFTWARE/SVG%20Files/ReadMe.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)