2015-11-03 235 views
-2

平台

OS - >的ubuntu 15.10 64 IDE - > Qt创建者 CXX - >铛64Qt的C++类的变量初始化

未初始化的变量 “ABCDEFGH”,但乳宁“求时“价值总是零;为什么?

代码

enter code here 
#include <iostream> 
#include <stdio.h> 
using namespace std; 

class A { 
public: 
    A() {} 
    void show() { 
     int e; 
     int f; 
     int g; 
     int h; 
     printf("value show a = 0x%08X , b = 0x%08X , c = 0x%08X , d = 0x%08X\n", a, b, c, d); 
     printf("value show e = 0x%08X , f = 0x%08X , g = 0x%08X , h = 0x%08X\n", e, f, g, h); 
     printf("mapid show e = 0x%08X , f = 0x%08X , g = 0x%08X , h = 0x%08X\n", &e, &f, &g, &h); 
    } 

private: 
    int a; 
    int b; 
    int c; 
    int d; 
}; 


int main() 
{ 
    A aaa; 
    aaa.show(); 
    int a; 
    printf("0x%08x\n", a); 

    while(1); 
    return 0; 
} 
+6

为什么不呢? “未初始化”并不意味着“不是零的东西”。并且使用未初始化变量的值是未定义的。 – molbdnilo

+0

但在我的运行环境中,变量“b e g”是确定的并始终为零;我跑了很多次。你可以试试 ! –

+1

我想你期望看到一些可以识别为“随机垃圾”的东西,但“未初始化”也并不意味着“在随后的执行中不一样”,并且0也不比2384373更不确定.C++规定不是对使用未初始化变量的程序的要求。你的程序也可以为任何事情打印0;变量仍然是未初始化的,它们的值仍然是不确定的,程序仍然是未定义的。 – molbdnilo

回答

4

您正在使用未初始化的变量。您在变量中找到的“随机垃圾”取决于堆栈中的数据。并且堆栈中的数据或多或少是随机的。
你发现一些变量是零,因为堆栈在这个地方是零。原因,为什么堆栈为零,可以是随机的,但也可以取决于你的程序。

每个函数调用都会操纵堆栈,所以它可能会发生,有些零被“遗留”了一些以前调用过的函数。 如果您认为您的程序没有以前调用过的功能,那么您最好检查一下机器码。有很多事情发生,你不希望它...

你可以阅读更多关于堆和堆栈here,或只是在网上搜索它。对于这样的问题,你应该真的看看机器代码;)