0428 汇编 死循环 1
看到一个人转的文字,好像很确定的样子,下面有几个人试验了好像不行,试一试
#include <stdio.h>
void main()
&leftsign;
int i, b[10];
for ( i = 0; i <= 10; i++ )
&leftsign;
b[i] = 0;
&rightsign;
&rightsign;
现在你看到了,i所占据的正是b[10]的位置,而b[10] = 0;这一句会被这样运行:
*(&b[0] + 10) = 0;
所以这一句的结果,就是把0赋值给i。这样一来在第11次循环的时候,i将会被重新置为0,那么循环结束的条件也就永远不会满足了,循环也就是个死循环了。
我觉得有点奇怪,按照道理应该先分配I吧,看看汇编代码
185: int i=0,b[10] = &leftsign; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 &rightsign;;
0040237D mov dword ptr [ebp-8],0
00402384 mov dword ptr [ebp-30h],1
0040238B mov dword ptr [ebp-2Ch],2
00402392 mov dword ptr [ebp-28h],3
00402399 mov dword ptr [ebp-24h],4
004023A0 mov dword ptr [ebp-20h],5
004023A7 mov dword ptr [ebp-1Ch],6
004023AE mov dword ptr [ebp-18h],7
004023B5 mov dword ptr [ebp-14h],8
004023BC mov dword ptr [ebp-10h],9
004023C3 mov dword ptr [ebp-0Ch],0Ah
186: for ( i = 0; i <= 10; i++ )
004023CA mov dword ptr [ebp-8],0
004023D1 jmp CTestDlg::OnOK+7Ch (004023dc)
004023D3 mov eax,dword ptr [ebp-8]
004023D6 add eax,1
004023D9 mov dword ptr [ebp-8],eax
004023DC cmp dword ptr [ebp-8],0Ah
004023E0 jg CTestDlg::OnOK+8Fh (004023ef)
187: &leftsign;
188: b[i] = 0;
004023E2 mov ecx,dword ptr [ebp-8]
004023E5 mov dword ptr [ebp+ecx*4-30h],0
189: &rightsign;
004023ED jmp CTestDlg::OnOK+73h (004023d3)
190: printf("%d\\n",i);
004023EF mov esi,esp
004023F1 mov edx,dword ptr [ebp-8]
004023F4 push edx
004023F5 push offset string "%d\\n" (0041501c)
004023FA call dword ptr [MSVCRTD_NULL_THUNK_DATA (004176a0)]
00402400 add esp,8
00402403 cmp esi,esp
00402405 call _chkesp (00401f8e)
191:
192: &rightsign;
历史博文
- 20071213 gridview 资料 - 2008
- 20070428 avg anti vir spyware - 2007
- 外国 EMAIL 诈骗 藏宝 - 2005
- VMware Workstation 虚拟机 系统需求 软件安装 - 2005
- 路由 远程访问 Route - 2005