void main()
{
?int i;
?int a[10];
?for(i = 0;i <=10;i ++)
??a[i] = 0;
}
大家看,很簡(jiǎn)單的一個(gè)問題,但是為什么會(huì)一直執(zhí)行呢?
明顯,聰明的你看出問題出現(xiàn)for(i = 0;i <= 10;i ++)???a[i] = 0;
總共定義了10個(gè)int,明顯循環(huán)超出了范圍,
下面我們就來看看其匯編如何運(yùn)行,大家就都明白了.
00401031?? mov???????? eax,dword ptr [ebp-4]
00401034?? add???????? eax,1
00401037?? mov???????? dword ptr [ebp-4],eax
0040103A?? cmp???????? dword ptr [ebp-4],0Ah
0040103E?? jg????????? main+3Dh (0040104d)
00401040?? mov???????? ecx,dword ptr [ebp-4]
00401043?? mov???????? dword ptr [ebp+ecx*4-2Ch],0
0040104B?? jmp???????? main+21h (00401031)
程序一直在00401031-0040104B之間運(yùn)行,問題出在00401043上面,
i變量在dwort ptr[ebp-4]
那么當(dāng)執(zhí)行到i =10
dword ptr[ebp + ecx*4-2cH]= dword ptr[ebp+dword ptr[ebp-4]*4-2ch]
=dword ptr[ebp + 10*4-44] = dword ptr[ebp-4]
哈哈,i變成了0