简单的“结合”,致命的失误。

在写个简单的数组插入排序,涉及到数组元素赋值。逻辑是元素后移,将前一个元素值赋值给下一个。于是写下了与下面例子相近的代码:

 

char ap[] = "fdpasb";

 

int i = 1;

ap[i] = ap[--i];

 

 

运行后发现赋值没有起到作用,数组未有任何变化。搞了半天没思路,以为是编译器优化的原因,于是硬着头皮看其汇编代码:

 

char ap[] = "fdpasb";

010D1418  mov         eax,dword ptr [string "fdpasb" (10D573Ch)]  

010D141D  mov         dword ptr [ebp-10h],eax  

010D1420  mov         cx,word ptr ds:[10D5740h]  

010D1427  mov         word ptr [ebp-0Ch],cx  

010D142B  mov         dl,byte ptr ds:[10D5742h]  

010D1431  mov         byte ptr [ebp-0Ah],dl  

 

int i = 1;

010D1434  mov         dword ptr [ebp-1Ch],1  

 

ap[i] = ap[--i];

010D143B  mov         eax,dword ptr [ebp-1Ch]  

010D143E  sub         eax,1  

010D1441  mov         dword ptr [ebp-1Ch],eax  

010D1444  mov         ecx,dword ptr [ebp-1Ch]  

010D1447  mov         edx,dword ptr [ebp-1Ch]  

010D144A  mov         al,byte ptr [ebp+edx-10h]  

010D144E  mov         byte ptr [ebp+ecx-10h],al 

 

 

注意加粗黑的几行,赋值表达式两边的元素index是完全一致的自减后的结果.... 这才想到赋值表达式的右结合。

 

 

检讨下失误的原因:逻辑与代码语法脱钩了。。望自勉,少再犯这种很低级的错误。:(

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCIe是一种计算机硬件接口标准,用于连接计算机主板和其他外部设备,例如显卡、网卡和存储设备。在PCIe的使用过程中,可能会出现不可修复的错误,这些错误可以分为致命和非致命错误两种情况。 致命错误指的是当PCIe发生严重故障或出现不可修复的错误时,它将导致连接的设备无法正常工作。这种情况下,计算机系统可能会崩溃或故障,必须重新启动系统才能恢复正常运行。致命错误可能由于硬件故障、电源问题或者连接不良等原因造成。 非致命错误是指在PCIe连接过程中出现的一些较小的问题,这些问题可以通过重新插拔设备或重新启动系统来解决。非致命错误可能包括连接不良、数据传输错误等。虽然非致命错误不会导致系统完全崩溃,但它们可能会对系统的性能和稳定性产生一定的影响。 需要注意的是,对于PCIe不可修复的错误,我们无法通过简单的软件修复来解决问题,而是需要进行硬件的检修或更换。因此,在使用PCIe接口的设备时,我们应该定期检查设备的连接状态,及时发现并解决可能存在的问题,以确保系统的正常运行和稳定性。 总的来说,PCIe不可修复的错误可能是致命的或非致命的,致命错误会导致系统崩溃,而非致命错误则可能会降低系统性能。对于这些错误,我们应该重视其出现的原因,并采取适当的措施来防止其发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值