C语言打印局部变量输出-858993460

发表于:2015年4月19日 15:10  分类:c 826次浏览

使用vc++2013编译c语言,main函数中定义局部变量,而且没有初始化该局部变量,尝试用printf打印这些变量:

#include <stdio.h>

int main()
{
	int	k;
	printf("%d\n", k);
	return 0;
}

运行结果为:

-858993460
Press any key to continue...

为什么会输出-858993460呢?在程序中并没有定义这个值。
查看程序的反汇编代码:

--- c:\users\liyibo\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\main.c 
     1: #include <stdio.h>
     2: 
     3: int main()
     4: {
55                   push        ebp  
8B EC                mov         ebp,esp  
81 EC D8 00 00 00    sub         esp,0D8h  
53                   push        ebx  
56                   push        esi  
57                   push        edi  
8D BD 28 FF FF FF    lea         edi,[ebp+FFFFFF28h]  
B9 36 00 00 00       mov         ecx,36h  
B8 CC CC CC CC       mov         eax,0CCCCCCCCh  
F3 AB                rep stos    dword ptr es:[edi]  
C6 85 2F FF FF FF 00 mov         byte ptr [ebp+FFFFFF2Fh],0  
     5: 	int	k;
     6: 	printf("%d\n", k);
80 BD 2F FF FF FF 00 cmp         byte ptr [ebp+FFFFFF2Fh],0  
75 0D                jne         00A43C1B  
68 4C 3C A4 00       push        0A43C4Ch  
E8 9C D4 FF FF       call        00A410B4  
83 C4 04             add         esp,4  
8B F4                mov         esi,esp  
8B 45 F8             mov         eax,dword ptr [ebp-8]  
50                   push        eax  
68 58 58 A4 00       push        0A45858h  
FF 15 14 91 A4 00    call        dword ptr ds:[00A49114h]  
83 C4 08             add         esp,8  
3B F4                cmp         esi,esp  
E8 00 D5 FF FF       call        00A41136  
     7: 	return 0;
33 C0                xor         eax,eax  
     8: }
5F                   pop         edi  
5E                   pop         esi  
5B                   pop         ebx  
81 C4 D8 00 00 00    add         esp,0D8h  
3B EC                cmp         ebp,esp  
E8 EE D4 FF FF       call        00A41136  
8B E5                mov         esp,ebp  
5D                   pop         ebp  
C3                   ret  
6B 00 CC             imul        eax,dword ptr [eax],0FFFFFFCCh  
--- 无源文件 -----------------------------------------------------------------------

在第四行有一段初始化栈段的代码,将ebp到ebp-0D8h的字节都赋值为0CCh,定义的局部变量都存储在这些初始化的栈段中。如果局部变量没有初始化,就会打印出0xCCCCCCCC,对应的十进制代码正好是-858993460。

发表评论

电子邮件地址不会被公开。 必填项已用*标注