有时候一运行软件就弹窗:0x1000477b指令引用的内存不能为read,然后程序直接崩了,烦死了!特别是用IE或者开某些大软件的时候,动不动就来一下。
这问题我之前也遇到过,总结下来可能有这么几个原因:
1. IE有漏洞,尤其是老版本的,容易缓冲区溢出,赶紧升级补丁或者换浏览器;
2. 内存地址冲突,Windows是多任务系统,前一个程序还没关,新的又来了,内存分配不过来就GG了;
3. 内存条有问题——比如两条不同牌子、不同大小的混插,兼容性不好;或者用了杂牌/二手条子,质量不行;超频了的话还要看散热行不行。建议用MemTest跑个检测,看看内存稳不稳;
4. 系统本身有坑,比如Windows把0x00000000到0x0000ffff这段地址设成禁区,程序不小心读了就会报错。尤其C/C++写的程序没做错误检查,malloc失败返回null还继续用,直接炸;
5. PIF文件搞事:用ASCII字符填满的假pif文件,只要超过369字节,点属性就会崩溃,Explorer都扛不住,提示内存不能为read。改了特定16进制位置的数据也会出问题;
6. Apache或Oracle服务装得不对,比如OracleOraHomeXXHTTPServer这种服务开着但配置不对,也可能引发内存报错,建议去服务里把它停掉;
7. 程序自己没做好内存管理,申请内存失败也不检查,一读就崩。
解决办法可以试试:
- 更新系统补丁
- 换浏览器(别再用老旧IE了)
- 别混插内存条,优先单条大容量
- 清理下虚拟内存,或者手动设置个固定值
- 跑MemTest测内存稳定性
- 关闭不必要的后台服务,尤其是数据库类的
- 重装出问题的软件
总之先软后硬,一步步排查呗~
这问题我之前也遇到过,总结下来可能有这么几个原因:
1. IE有漏洞,尤其是老版本的,容易缓冲区溢出,赶紧升级补丁或者换浏览器;
2. 内存地址冲突,Windows是多任务系统,前一个程序还没关,新的又来了,内存分配不过来就GG了;
3. 内存条有问题——比如两条不同牌子、不同大小的混插,兼容性不好;或者用了杂牌/二手条子,质量不行;超频了的话还要看散热行不行。建议用MemTest跑个检测,看看内存稳不稳;
4. 系统本身有坑,比如Windows把0x00000000到0x0000ffff这段地址设成禁区,程序不小心读了就会报错。尤其C/C++写的程序没做错误检查,malloc失败返回null还继续用,直接炸;
5. PIF文件搞事:用ASCII字符填满的假pif文件,只要超过369字节,点属性就会崩溃,Explorer都扛不住,提示内存不能为read。改了特定16进制位置的数据也会出问题;
6. Apache或Oracle服务装得不对,比如OracleOraHomeXXHTTPServer这种服务开着但配置不对,也可能引发内存报错,建议去服务里把它停掉;
7. 程序自己没做好内存管理,申请内存失败也不检查,一读就崩。
解决办法可以试试:
- 更新系统补丁
- 换浏览器(别再用老旧IE了)
- 别混插内存条,优先单条大容量
- 清理下虚拟内存,或者手动设置个固定值
- 跑MemTest测内存稳定性
- 关闭不必要的后台服务,尤其是数据库类的
- 重装出问题的软件
总之先软后硬,一步步排查呗~