电脑内存条废物利用问题

内存条出问题 电脑会有什么现象(台式)_百度知道
内存条出问题 电脑会有什么现象(台式)
我有更好的答案
  关于内存出问题后,电脑会有什么情况的问题,其实有很多情况,大致为以下几种:  1、内存插上后主板报警。这种情况是无法开机的。这是属于内存坏了情况。  2、在开机后出现000x000000蓝屏的类似情况,这种情况是属于内存频率和主板总线出现的问题,可能是主板不支持该内存的频率。  3、机器开机正常,但是在运行大型运算或是游戏中出现蓝屏,类似第2种情况,那这种情况可能是属于内存时序错乱的问题,可能是你超频造成的内存时序错乱。  4、机器运行,运算,游戏一切正常,但是在系统属性中显示不出来内存的容量或是少显示内存容量,这种情况可能是你系统的问题,也可能是主板的插槽坏掉进而没有识别其中一个内存的情况,这种情况主板是不会报警的。   5、内存的金手指坏掉。如果你是有两条内存的话,那系统只会识别那个没有坏掉的内存,所以也就会出现上一种情况,这样主板也是不会报警的,如果单插这一条坏掉的内存,那么主板会报警。
采纳率:46%
首先你要确认你开机的时候有没有滴的一声,只是检测内存OK的只是,坏的不是滴的一声,具体是什么我忘了。这样一般就能确认内存是不是坏了。如果没任何反应你不妨试试3楼的方法,这样比较简单,但是你要确定你的内存是不是和另一台的电脑兼容。不兼容的话可能就检测不出来了。不知道你电脑什么时候配置的。5年前一般都是DDR,也就是333 400 533的。4年前到2-3年前是DDR2,也就是667 800的。这两年都是1333的基本上。貌似你要看你内存是什么牌子的。有的是3年保修(要不就是包换了)有的是5年,有的是终身。当然不能是你认为损坏的。一般电脑你要是不超频不磕碰的话都没什么硬件问题吧。我感觉内存在硬件上很少出问题。一般都是电源和主板问题多一点。
会滴滴滴鸣响
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。爱卡汽车_中国领先的汽车主题社区、汽车资讯、汽车论坛中心&&[&& 原创&&]&& 作者:&&|&&责编:王晔
问题:主板发出警报&主板无法点亮问题源:内存问题&&&&内存条原因出现此类故障一般是因为内存条与主板内存插槽接触不良造成。(开机时会有蜂鸣警报)只要用橡皮擦来回擦试其金手指部位即可解决问题(不要用酒精等清洗),还有就是内存损坏或主板内存槽有问题也会造成此类故障。内存条安装位置检修一:内存条金手指&&&&内存问题首先检查下内存有没有插紧;一般在搬动过后有可能内存变松动造成开机故障。再者可能是主机积灰过多造成内存短路,可以先吹一吹内存插槽附近的灰,待清理干净后再用橡皮擦拭内存条的金手指。&&&&同时笔者还建议内存条安装最好使用同一型号的,并且按照插槽颜色选择双通道安装。可避免在使用中出现得一些频率一集读取速率等方面得问题。
提示:支持键盘“← →”键翻页
机箱类型 机箱结构
投诉欺诈商家:
天津重庆哈尔滨沈阳长春石家庄呼和浩特西安太原兰州乌鲁木齐成都昆明贵阳长沙武汉郑州济南青岛烟台合肥南京杭州东莞南宁南昌福州厦门深圳温州佛山宁波泉州惠州银川
本城市下暂无经销商后使用快捷导航没有帐号?
查看: 1593|回复: 25
关于吃内存的问题
主题帖子积分
Lv.2, 积分 205, 距离下一级还需 395 积分
Lv.2, 积分 205, 距离下一级还需 395 积分
求助各位大大,这游戏超级吃内存,CPU使用90%+,如何才能解决这个问题哈
主题帖子积分
Lv.3, 积分 819, 距离下一级还需 181 积分
Lv.3, 积分 819, 距离下一级还需 181 积分
垂直同步、后期处理、反锯齿这些关闭,材质过滤请选择三线性过滤,多线程CPU请选择关闭,阴影和特效请选择低即可;
如果是使用64位的,建议,使用16G内存,最低使用8G内存,然后虚拟内存设置到20G或以上,如果选择32位的基本上只按上面设置就会很流畅了
不过深渊赛季,好像是地图中有地面环境的会比较卡,比如感电、冰冷、火焰地面,内存偏低的话,显卡偏低的话会比较卡,我的内存是16G的,CPU i7--4790&&,显卡是GTX750
表示很顺畅
32位的这三线性过滤真不敢选啊! 默认二线还稳定点&
主题帖子积分
Lv.2, 积分 328, 距离下一级还需 272 积分
Lv.2, 积分 328, 距离下一级还需 272 积分
根本解决问题就是换个好点的电脑...
主题帖子积分
Lv.2, 积分 194, 距离下一级还需 406 积分
Lv.2, 积分 194, 距离下一级还需 406 积分
cpu6700K&&8g内存&&1080&&表示不卡呀
主题帖子积分
Lv.2, 积分 210, 距离下一级还需 390 积分
Lv.2, 积分 210, 距离下一级还需 390 积分
主题帖子积分
Lv.2, 积分 95, 距离下一级还需 505 积分
Lv.2, 积分 95, 距离下一级还需 505 积分
不换电脑估计解决不了
主题帖子积分
Lv.2, 积分 217, 距离下一级还需 383 积分
Lv.2, 积分 217, 距离下一级还需 383 积分
主题帖子积分
Lv.2, 积分 117, 距离下一级还需 483 积分
Lv.2, 积分 117, 距离下一级还需 483 积分
请教大神 怪物多了就卡 怎么调
主题帖子积分
Lv.2, 积分 396, 距离下一级还需 204 积分
Lv.2, 积分 396, 距离下一级还需 204 积分
曾经在网吧玩过一次跑得飞起啊,加上大曲面屏很爽
主题帖子积分
Lv.2, 积分 195, 距离下一级还需 405 积分
Lv.2, 积分 195, 距离下一级还需 405 积分
i5 3470表示都没问题 主要是网络卡
主题帖子积分
Lv.2, 积分 134, 距离下一级还需 466 积分
Lv.2, 积分 134, 距离下一级还需 466 积分
表示卡成狗
主题帖子积分
Lv.2, 积分 191, 距离下一级还需 409 积分
Lv.2, 积分 191, 距离下一级还需 409 积分
16g+ SSD标配了!
主题帖子积分
Lv.2, 积分 319, 距离下一级还需 281 积分
Lv.2, 积分 319, 距离下一级还需 281 积分
主题帖子积分
Lv.2, 积分 220, 距离下一级还需 380 积分
Lv.2, 积分 220, 距离下一级还需 380 积分
我打了功能补丁后突然就不卡了
主题帖子积分
Lv.2, 积分 72, 距离下一级还需 528 积分
Lv.2, 积分 72, 距离下一级还需 528 积分
同问,进图打怪还好只要是深渊和裂缝这种往出刷怪的点,直接变成幻片灯,上一张图片满血呢下一张图片叫我复活了,10次9次都死在深渊上现在深渊都不敢踩了
主题帖子积分
Lv.2, 积分 163, 距离下一级还需 437 积分
Lv.2, 积分 163, 距离下一级还需 437 积分
不开太高的效果就是了
主题帖子积分
Lv.2, 积分 72, 距离下一级还需 528 积分
Lv.2, 积分 72, 距离下一级还需 528 积分
我选32位自动崩
主题帖子积分
Lv.2, 积分 63, 距离下一级还需 537 积分
Lv.2, 积分 63, 距离下一级还需 537 积分
为什么我的从高石 是-44个?
想一想是不是罐过水贴??&
主题帖子积分
Lv.1, 积分 38, 距离下一级还需 12 积分
Lv.1, 积分 38, 距离下一级还需 12 积分
i5 3470表示都没问题
主题帖子积分
Lv.2, 积分 395, 距离下一级还需 205 积分
Lv.2, 积分 395, 距离下一级还需 205 积分
我I5 4590 完美运行 显卡是1050TI
稀有勋章,感谢您在poe社区中热心帮忙解答萌新问题!常见的C语言内存错误及对策_C语言中文网
&&C语言辅导班&&&&
&&C++辅导班&&&&
&&算法/数据结构辅导班&&&&
读者QQ交流群:loading...
&&/&&&&/&&&&/&&
一、指针没有指向一块合法的内存
定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。浅显的例子就不举了,这里举几个比较隐蔽的例子。
1、结构体成员指针未初始化
struct student
& &strcpy(stu.name,&Jimy&);
& &stu.score = 99;
& &return 0;
很多初学者犯了这个错误还不知道是怎么回事。这里定义了结构体变量stu,但是他没想到这个结构体内部char *name 这成员在定义结构体变量stu 时,只是给name 这个指针变量本身分配了4 个字节。name 指针并没有指向一个合法的地址,这时候其内部存的只是一些乱码。所以在调用strcpy 函数时,会将字符串&Jimy&往乱码所指的内存上拷贝,而这块内存name 指针根本就无权访问,导致出错。解决的办法是为name 指针malloc 一块空间。
同样,也有人犯如下错误:
& &pstu = (struct student*)malloc(sizeof(struct student));
& &strcpy(pstu-&name,&Jimy&);
& &pstu-&score = 99;
& &free(pstu);
& &return 0;
为指针变量pstu 分配了内存,但是同样没有给name 指针分配内存。错误与上面第一种情况一样,解决的办法也一样。这里用了一个malloc 给人一种错觉,以为也给name 指针分配了内存。
2、没有为结构体指针分配足够的内存
& &pstu = (struct student*)malloc(sizeof(struct student*));
& &strcpy(pstu-&name,&Jimy&);
& &pstu-&score = 99;
& &free(pstu);
& &return 0;
为pstu 分配内存的时候,分配的内存大小不合适。这里把sizeof(struct student)误写为sizeof(struct student*)。当然name 指针同样没有被分配内存。解决办法同上。
3、函数的入口校验
不管什么时候,我们使用指针之前一定要确保指针是有效的。
一般在函数入口处使用assert(NULL != p)对参数进行校验。在非参数的地方使用if(NULL != p)来校验。但这都有一个要求,即p 在定义的同时被初始化为NULL 了。比如上面的例子,即使用if(NULL != p)校验也起不了作用,因为name 指针并没有被初始化为NULL,其内部是一个非NULL 的乱码。
assert 是一个宏,而不是函数,包含在assert.h 头文件中。如果其后面括号里的值为假,则程序终止运行,并提示出错;如果后面括号里的值为真,则继续运行后面的代码。这个宏只在Debug 版本上起作用,而在Release 版本被编译器完全优化掉,这样就不会影响代码的性能。
有人也许会问,既然在Release 版本被编译器完全优化掉,那Release 版本是不是就完全没有这个参数入口校验了呢?这样的话那不就跟不使用它效果一样吗?
是的,使用assert 宏的地方在Release 版本里面确实没有了这些校验。但是我们要知道,assert 宏只是帮助我们调试代码用的,它的一切作用就是让我们尽可能的在调试函数的时候把错误排除掉,而不是等到Release 之后。它本身并没有除错功能。再有一点就是,参数出现错误并非本函数有问题,而是调用者传过来的实参有问题。assert 宏可以帮助我们定位错误,而不是排除错误。
二、为指针分配的内存太小
为指针分配了内存,但是内存大小不够,导致出现越界错误。
& &char *p1 = &abcdefg&;
& &char *p2 = (char *)malloc(sizeof(char)*strlen(p1));
& &strcpy(p2,p1);
p1 是字符串常量,其长度为7 个字符,但其所占内存大小为8 个byte。初学者往往忘了字符串常量的结束标志&\0&。这样的话将导致p1 字符串中最后一个空字符&\0&没有被拷贝到p2 中。解决的办法是加上这个字符串结束标志符:
& &char *p2 = (char *)malloc(sizeof(char)*strlen(p1)+1*sizeof(char));
这里需要注意的是,只有字符串常量才有结束标志符。比如下面这种写法就没有结束标志符了:
& &char a[7] = {&a&,&b&,&c&,&d&,&e&,&f&,&g&};
另外,不要因为char 类型大小为1 个byte 就省略sizof(char)这种写法。这样只会使你的代码可移植性下降。
三、内存分配成功,但并未初始化
犯这个错误往往是由于没有初始化的概念或者是以为内存分配好之后其值自然为0。未初始化指针变量也许看起来不那么严重,但是它确确实实是个非常严重的问题,而且往往出现这种错误很难找到原因。
曾经有一个学生在写一个windows 程序时,想调用字库的某个字体。而调用这个字库需要填充一个结构体。他很自然的定义了一个结构体变量,然后把他想要的字库代码赋值给了相关的变量。但是,问题就来了,不管怎么调试,他所需要的这种字体效果总是不出来。我在检查了他的代码之后,没有发现什么问题,于是单步调试。在观察这个结构体变量的内存时,发现有几个成员的值为乱码。就是其中某一个乱码惹得祸!因为系统会按照这个结构体中的某些特定成员的值去字库中寻找匹配的字体,当这些值与字库中某种字体的某些项匹配时,就调用这种字体。但是很不幸,正是因为这几个乱码,导致没有找到相匹配的字体!因为系统并无法区分什么数据是乱码,什么数据是有效的数据。只要有数据,系统就理所当然的认为它是有效的。
也许这种严重的问题并不多见,但是也绝不能掉以轻心。所以在定义一个变量时,第一件事就是初始化。你可以把它初始化为一个有效的值,比如:
& &int i = 10;
& &char *p = (char *)malloc(sizeof(char));
但是往往这个时候我们还不确定这个变量的初值,这样的话可以初始化为0 或NULL。
& &int i = 0;
& &char *p = NULL;
如果定义的是数组的话,可以这样初始化:
& &int a[10] = {0};
或者用memset 函数来初始化为0:
& &memset(a,0,sizeof(a));
memset 函数有三个参数,第一个是要被设置的内存起始地址;第二个参数是要被设置的值;第三个参数是要被设置的内存大小,单位为byte。这里并不想过多的讨论memset 函数的用法,如果想了解更多,请参考相关资料。
至于指针变量如果未被初始化,会导致if 语句或assert 宏校验失败。这一点,上面已有分析。
四、内存越界
内存分配成功,且已经初始化,但是操作越过了内存的边界。这种错误经常是由于操作数组或指针时出现&多1&或&少1&。比如:
int a[10] = {0};
for (i=0; i&=10; i++)
所以,for 循环的循环变量一定要使用半开半闭的区间,而且如果不是特殊情况,循环变量尽量从0 开始。
五、内存泄漏
内存泄漏几乎是很难避免的,不管是老手还是新手,都存在这个问题。甚至包括windows,Linux 这类软件,都或多或少有内存泄漏。也许对于一般的应用软件来说,这个问题似乎不是那么突出,重启一下也不会造成太大损失。但是如果你开发的是嵌入式系统软件呢?比如汽车制动系统,心脏起搏器等对安全要求非常高的系统。你总不能让心脏起搏器重启吧,人家阎王老爷是非常好客的。
会产生泄漏的内存就是堆上的内存(这里不讨论资源或句柄等泄漏情况),也就是说由malloc 系列函数或new 操作符分配的内存。如果用完之后没有及时free 或delete,这块内存就无法释放,直到整个程序终止。
1、告老还乡求良田
怎么去理解这个内存分配和释放过程呢?先看下面这段对话:
万岁爷:爱卿,你为朕立下了汗马功劳,想要何赏赐啊?
某功臣:万岁,黄金白银,臣视之如粪土。臣年岁已老,欲告老还乡。臣乞良田千亩以荫后世,别无他求。
万岁爷:爱卿,你劳苦功高,却仅要如此小赏,朕今天就如你所愿。户部刘侍郎,查看湖广一带是否还有千亩上等良田未曾封赏。
刘侍郎:长沙尚有五万余亩上等良田未曾封赏。
万岁爷:在长沙拨良田千亩封赏爱卿。爱卿,良田千亩,你欲何用啊?
某功臣:谢万岁。长沙一带,适合种水稻,臣想用来种水稻。种水稻需要把田分为一亩一块,方便耕种。
2、如何使用malloc 函数
不要莫名其妙,其实上面这段小小的对话,就是malloc 的使用过程。malloc 是一个函数,专门用来从堆上分配内存。使用malloc 函数需要几个要求:
内存分配给谁?这里是把良田分配给某功臣。
分配多大内存?这里是分配一千亩。
是否还有足够内存分配?这里是还有足够良田分配。
内存的将用来存储什么格式的数据,即内存用来做什么?
这里是用来种水稻,需要把田分成一亩一块。分配好的内存在哪里?这里是在长沙。
如果这五点都确定,那内存就能分配。下面先看malloc 函数的原型:
& &(void *)malloc(int size)
malloc 函数的返回值是一个void 类型的指针,参数为int 类型数据,即申请分配的内存大小,单位是byte。内存分配成功之后,malloc 函数返回这块内存的首地址。你需要一个指针来接收这个地址。但是由于函数的返回值是void *类型的,所以必须强制转换成你所接收的类型。也就是说,这块内存将要用来存储什么类型的数据。比如:
& &char *p = (char *)malloc(100);
在堆上分配了100 个字节内存,返回这块内存的首地址,把地址强制转换成char *类型后赋给char *类型的指针变量p。同时告诉我们这块内存将用来存储char 类型的数据。也就是说你只能通过指针变量p 来操作这块内存。这块内存本身并没有名字,对它的访问是匿名访问。
上面就是使用malloc 函数成功分配一块内存的过程。但是,每次你都能分配成功吗?
不一定。上面的对话,皇帝让户部侍郎查询是否还有足够的良田未被分配出去。使用malloc函数同样要注意这点:如果所申请的内存块大于目前堆上剩余内存块(整块),则内存分配会失败,函数返回NULL。注意这里说的&堆上剩余内存块&不是所有剩余内存块之和,因为malloc 函数申请的是连续的一块内存。
既然malloc 函数申请内存有不成功的可能,那我们在使用指向这块内存的指针时,必须用if(NULL != p)语句来验证内存确实分配成功了。
3、用malloc 函数申请0 字节内存
另外还有一个问题:用malloc 函数申请0 字节内存会返回NULL 指针吗?
可以测试一下,也可以去查找关于malloc 函数的说明文档。申请0 字节内存,函数并不返回NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为0 的内存。这好尺子上的某个刻度,刻度本身并没有长度,只有某两个刻度一起才能量出长度。对于这一点一定要小心,因为这时候if(NULL != p)语句校验将不起作用。
4、内存释放
既然有分配,那就必须有释放。不然的话,有限的内存总会用光,而没有释放的内存却在空闲。与malloc 对应的就是free 函数了。free 函数只有一个参数,就是所要释放的内存块的首地址。比如上例:
& &free(p);
free 函数看上去挺狠的,但它到底作了什么呢?其实它就做了一件事:斩断指针变量与这块内存的关系。比如上面的例子,我们可以说malloc 函数分配的内存块是属于p 的,因为我们对这块内存的访问都需要通过p 来进行。free 函数就是把这块内存和p 之间的所有关系斩断。从此p 和那块内存之间再无瓜葛。至于指针变量p 本身保存的地址并没有改变,但是它对这个地址处的那块内存却已经没有所有权了。那块被释放的内存里面保存的值也没有改变,只是再也没有办法使用了。
这就是free 函数的功能。按照上面的分析,如果对p 连续两次以上使用free 函数,肯定会发生错误。因为第一使用free 函数时,p 所属的内存已经被释放,第二次使用时已经无内存可释放了。关于这点,我上课时让学生记住的是:一定要一夫一妻制,不然肯定出错。
malloc 两次只free 一次会内存泄漏;malloc 一次free 两次肯定会出错。也就是说,在程序中malloc 的使用次数一定要和free 相等,否则必有错误。这种错误主要发生在循环使用malloc 函数时,往往把malloc 和free 次数弄错了。这里留个练习:
写两个函数,一个生成链表,一个释放链表。两个函数的参数都只使用一个表头指针。
5、内存释放之后
既然使用free 函数之后指针变量p 本身保存的地址并没有改变,那我们就需要重新把p的值变为NULL:
& &p = NULL;
这个NULL 就是我们前面所说的&栓野狗的链子&。如果你不栓起来迟早会出问题的。比如:
在free(p)之后,你用if(NULL != p)这样的校验语句还能起作用吗?例如:
& &char *p = (char *)malloc(100);
& &strcpy(p, &hello&);
& &free(p); /* p 所指的内存被释放,但是p 所指的地址仍然不变*/
& &if (NULL != p)
& & & /* 没有起到防错作用*/
& & & strcpy(p, &world&); /* 出错*/
释放完块内存之后,没有把指针置NULL,这个指针就成为了&野指针&,也有书叫&悬垂指针&。这是很危险的,而且也是经常出错的地方。所以一定要记住一条:free 完之后,一定要给指针置NULL。
同时留一个问题:对NULL 指针连续free 多次会出错吗?为什么?如果让你来设计free函数,你会怎么处理这个问题?
六、内存已经被释放了,但是继续通过指针来使用
这里一般有三种情况:
第一种:就是上面所说的,free(p)之后,继续通过p 指针来访问内存。解决的办法就是给p 置NULL。
第二种:函数返回栈内存。这是初学者最容易犯的错误。比如在函数内部定义了一个数组,却用return 语句返回指向该数组的指针。解决的办法就是弄明白栈上变量的生命周期。
第三种:内存使用太复杂,弄不清到底哪块内存被释放,哪块没有被释放。解决的办法是重新设计程序,改善对象之间的调用关系。
上面详细讨论了常见的六种错误及解决对策,希望读者仔细研读,尽量使自己对每种错误发生的原因及预防手段烂熟于胸。一定要多练,多调试代码,同时多总结经验。
编程帮,一个分享编程知识的公众号。跟着一起学习,每天都有进步。
通俗易懂,深入浅出,一篇文章只讲一个知识点。
文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。
文章不涉及代码,不烧脑细胞,人人都可以学习。
当你决定关注「编程帮」,你已然超越了90%的程序员!
微信扫描二维码关注
本站精品教程
loading...
验证消息:严长生

我要回帖

更多关于 内存条坏了怎么修复 的文章

 

随机推荐