出现这问题一般分两方面,一个是硬件的问题,特别是内存条,另一个就是软件的问题了。先说硬件这块:
说实话,电脑的硬件其实挺耐用的,不太容易坏。内存出问题的情况其实不多,除非你用的是那种特别杂牌、质量差到不行的内存。常见的硬件问题有这么几种情况:
1. 内存条本身坏了,尤其是二手的更容易出问题;
2. 买到了质量不好的内存条,用着用着就出毛病;
3. 内存金手指那块积灰太多,接触不良;
4. 混用了不同品牌或者不同容量的内存条,导致兼容性问题;
5. 如果你超频了,散热没跟上也可能导致内存不稳定。
解决办法也很简单,可以下载个MemTest这个软件,专门用来测内存稳不稳定的,跑一遍基本就能发现问题。
如果硬件没问题,那就得从软件下手排查了。
简单说一下原理:程序运行的时候会申请一块内存来存数据,这部分地方叫缓冲区。操作系统有个功能函数,程序靠它来申请内存。如果分配成功,系统就会返回一个地址给程序,程序就靠着这个地址去使用对应的内存空间,这就叫动态内存分配。那个地址其实就是编程里的指针。
但内存也不是随便用都够的,有时候也会出现申请失败的情况。这时候系统函数就会返回一个0值,表示出错了。程序在每次申请内存后都应该检查一下这个返回值是不是0,如果是,说明出问题了,应该做点处理,增强程序的稳定性。
可有些程序压根就不检查,直接默认这个值是对的,继续往下走。结果它操作的那个内存其实是不存在的,或者说已经被系统回收了。而真正的0地址内存区域里存的是系统最重要的中断描述符表,应用程序是绝对不能碰的。
在以前没有保护机制的老系统(比如DOS)里,一旦程序往这个地方写数据,电脑直接死机。现在像Windows这种系统会马上拦截这个操作,强制关闭出错的程序,防止影响整个系统。这个时候你就会看到提示内存不能为read之类的错误信息,还会有个地址0x00000000,这就是典型的访问非法内存导致的崩溃。
内存分配失败的原因有很多,可能是内存不够用了,也可能是系统版本不对、软件冲突等等。这种情况多出现在系统用了很久、装了一大堆软件之后,特别是那些不小心中招的病毒软件,改动了很多系统设置和文件。
还有一种情况是,程序以为某个内存地址是可以用的,但实际上已经失效了。比如说,程序忘记告诉系统自己不再使用某块内存,结果另一部分代码又去读写这块内存,自然就会出错。这也是内存管理不当的一种常见表现。
遇到这类问题,先查硬件,再查软件,别急慢慢来,总能找到原因。
说实话,电脑的硬件其实挺耐用的,不太容易坏。内存出问题的情况其实不多,除非你用的是那种特别杂牌、质量差到不行的内存。常见的硬件问题有这么几种情况:
1. 内存条本身坏了,尤其是二手的更容易出问题;
2. 买到了质量不好的内存条,用着用着就出毛病;
3. 内存金手指那块积灰太多,接触不良;
4. 混用了不同品牌或者不同容量的内存条,导致兼容性问题;
5. 如果你超频了,散热没跟上也可能导致内存不稳定。
解决办法也很简单,可以下载个MemTest这个软件,专门用来测内存稳不稳定的,跑一遍基本就能发现问题。
如果硬件没问题,那就得从软件下手排查了。
简单说一下原理:程序运行的时候会申请一块内存来存数据,这部分地方叫缓冲区。操作系统有个功能函数,程序靠它来申请内存。如果分配成功,系统就会返回一个地址给程序,程序就靠着这个地址去使用对应的内存空间,这就叫动态内存分配。那个地址其实就是编程里的指针。
但内存也不是随便用都够的,有时候也会出现申请失败的情况。这时候系统函数就会返回一个0值,表示出错了。程序在每次申请内存后都应该检查一下这个返回值是不是0,如果是,说明出问题了,应该做点处理,增强程序的稳定性。
可有些程序压根就不检查,直接默认这个值是对的,继续往下走。结果它操作的那个内存其实是不存在的,或者说已经被系统回收了。而真正的0地址内存区域里存的是系统最重要的中断描述符表,应用程序是绝对不能碰的。
在以前没有保护机制的老系统(比如DOS)里,一旦程序往这个地方写数据,电脑直接死机。现在像Windows这种系统会马上拦截这个操作,强制关闭出错的程序,防止影响整个系统。这个时候你就会看到提示内存不能为read之类的错误信息,还会有个地址0x00000000,这就是典型的访问非法内存导致的崩溃。
内存分配失败的原因有很多,可能是内存不够用了,也可能是系统版本不对、软件冲突等等。这种情况多出现在系统用了很久、装了一大堆软件之后,特别是那些不小心中招的病毒软件,改动了很多系统设置和文件。
还有一种情况是,程序以为某个内存地址是可以用的,但实际上已经失效了。比如说,程序忘记告诉系统自己不再使用某块内存,结果另一部分代码又去读写这块内存,自然就会出错。这也是内存管理不当的一种常见表现。
遇到这类问题,先查硬件,再查软件,别急慢慢来,总能找到原因。