自修电脑引起的电脑异常噪音分析及解决办法
我常说,用电脑给医生治病,就像用人给医生治病一样。你需要看到、听到并提出问题。步骤之一是倾听。而且,如果电脑出现问题或者使用时间较长,也可能会发出一些异常的声音。由于计算机中能够发出声音的部件并不多,所以它实际上并没有发出声音。它并不复杂,但对于普通计算机用户来说,可能会感到困惑。下面我们就来解决一下电脑噪音异常的问题。可能没有显卡风扇,即使是没有独立显卡的电脑,也可能没有独立显卡。如果异常噪音来自风扇,则要么是润滑不当,要么是灰尘过多、阻力太大。解决办法是增加润滑并清除灰尘。说明硬件有问题,主板自检已发出报警。
我常说,用电脑给医生治病,就像用人给医生治病一样。 你需要看到、听到并提出问题。 步骤之一是倾听。 而且,如果电脑出现问题或者使用时间较长,也可能会发出一些异常的声音。 由于计算机中能够发出声音的部件并不多,所以它实际上并没有发出声音。 它并不复杂,但对于普通计算机用户来说,可能会感到困惑。 下面我们就来解决一下电脑噪音异常的问题。
首先,我们列出计算机中可能产生声音的组件:
第一:肉眼可见的几个风扇
当然,如果你的电脑出现问题,就需要开箱了。 电脑机箱不是什么高科技,通常打开机箱不会影响电脑,所以你可以勇敢一点。
打开机箱,可以看到里面有三个风扇,分别是机箱电源风扇、CPU风扇、显卡风扇。
可能没有显卡风扇,即使是没有独立显卡的电脑,也可能没有独立显卡。
因此,对于风扇异响最直接的答案就是听得见、看得见。 如果异常噪音来自风扇,则要么是润滑不当,要么是灰尘过多、阻力太大。 解决办法是增加润滑并清除灰尘。
二:硬盘的读写声音
硬盘应该是电脑中除了风扇之外唯一的机械设备,如下图所示。
有电机的旋转、磁头摆臂以及磁头与磁盘的接触。
由于不同的人对声音的感知不同,我实在无法形容正常的声音应该是“嘶嘶声”还是“嘶嘶声”。 不过平时可以留意一下,硬盘读写数据时,确实有声音。 看来现在硬盘的声音很安静了。 你必须记住正常时的声音。 那么当你发现硬盘的声音变成“嘎吱嘎吱”或者“嘎吱嘎吱”的声音时,就可能意味着硬盘出现了问题。 。
出现问题的硬盘通常会被更换,因为修复的费用可能足以或高于购买新硬盘的价格。 通常,硬盘维修修复的是数据,而不是硬盘。 昂贵的是数据,而不是硬盘。 因此,如果您感觉硬盘读取声音不对,就应该备份数据,以防发生意外。
第三:机箱喇叭的声音
好久没碰台式电脑了。 以前机箱有跳线接到主板上,然后电脑开机就发出嘟嘟的声音。 现在有些人告诉我他们的电脑没有发出蜂鸣声。 不知道是跳线没插还是取消了。 对于这个音箱,好像有的主板也有小音箱。
如果这个扬声器发出声音,除了“嘟嘟”声之外的所有声音通常都不是好事,可能发生了严重的事情。 说明硬件有问题,主板自检已发出报警。 不同的主板有不同的报警含义。 主板说明书上好像有说明。 你可以查一下你的主板说明书,看看有没有。
之前发过一篇关于主板报警声的解释的文章。 您可以点击查看常见主板报警声音分析! 当你遇到某人时,留下印象并产生好主意。
所以电脑异响就是这样的。 如果除上述异常声音外还有声音,则一定是电路烧毁的声音。 运气好的话,说不定还会伴随着火花,说不定还会发出“轰”的一声,好吧。 好吧,吓唬你一下,计算机通常不会爆炸。
在使用 C++ 编写代码时,您经常会遇到类似“异常抛出:读取访问权限冲突”之类的错误消息。 造成这种情况的主要原因有两个:
1. 访问数组越界
当使用线性表的顺序结构,如顺序链表、顺序队列、顺序堆栈等以数组方式存储数据时,如果要读取的数据的位置超过了当前数组的长度,则数组就会出现访问越界的情况。
但这不会导致编译错误。 也就是说,编译器在编译时不会指出你对数组的访问越界。 这个时候可能还是“0错误,0警告”
你还在暗自庆幸自己的代码没有bug,但是运行的时候却会抛出访问冲突异常。
例如:下面对队列和栈的操作
struct Stack //这里定义了一个栈的结构 { int data[maxSize]; //定义存储栈中元素的数组 int top; //定义栈顶指针 };
struct Queue //这里定义了一个队列的结构 { int elements[2000]; //定义一个长度为2000的数组存放队列中的元素 int front; //定义队头指针 int rear; //定义队尾指针 };
while (queueA->front < queueA->rear || queueB->front < queueB->rear) { queueA->front++; inStack(stack, queueA->elements[queueA->front]); outStack(stack, queueA); queueB->front++; inStack(stack, queueB->elements[queueB->front]); outStack(stack, queueB); } //inStack函数实现出队后进栈操作 //outStack函数实现出栈后入队操作,入队后队尾指针后移
编译成功,没有报错,但是运行后抛出读访问权限冲突的异常。
此时我们查看局部变量的状态,可以发现队列A的头指针和尾指针都指向异常下标。
这显然导致了越界访问,因为对于长度为2000的数组来说,下标值应该是0~1999。
后来发现错误出在while循环确定的条件上。 初衷是当A和B之间任一队列的元素为空时跳出循环。 但判断条件中的逻辑被错误地写成了逻辑OR,导致跳出循环出现延迟。 最终,队列A的头指针和尾指针在不断的循环操作过程中超出了数组边界,出现了读访问权限冲突异常。
修改while的判断条件后,程序可以正常运行。
因此,如果遇到读访问权限冲突,如果读取数组中的数据时出现异常,可以首先考虑是否由于某些不当操作导致对数组的访问越界。
2. 空指针异常
这主要发生在通过指针读取数据时,例如使用链表时。
示例:链表中的操作
struct Node //这里定义了一个结点 { int data; Node* next; };
LinkListInvert::LinkListInvert(int arg[],int n) { //重载构造函数对链表进行初始化 Node* r = first; Node* s = nullptr; for (int i = 0; i < n; i++) { s = new Node; s->data = arg[i]; r->next = s; r = s; } r->next = nullptr; }
代码编译没有错误,但是运行后出现读取权限异常。
这里不难看出,第一个指针还没有被初始化,使得第一个指针成为空指针,指向一个不确定的值,以及后续的操作
Node* r = first;
r指针也变成空指针,下次操作时抛出读权限冲突异常。
LinkListInvert::LinkListInvert(int arg[],int n) { first = new Node; //此处为修改的地方,对first初始化 Node* r = first; Node* s = nullptr; for (int i = 0; i < n; i++) { s = new Node; s->data = arg[i]; r->next = s; r = s; } r->next = nullptr; }
修改方法也非常简单。 初始化第一个指针后,就可以成功运行了。
同样,未初始化的指针引起的读访问权限异常也会给出0XCCCCCCC、0xCDCDCDD等异常提示。
当然,不仅仅是链表,很多其他情况也会出现空指针异常。 例如数据库查询中,指针未初始化时也会出现空指针异常。
总结
关于C++读访问权限冲突导致异常问题的这篇文章到此结束。 更多关于C++读访问权限冲突的信息,请搜索云海天教程之前的文章或继续浏览以下相关文章。 我希望你将来能找到他们。 请支持云海天教程!