2015-11-03 271 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,或只是在網上搜索它。對於這樣的問題,你應該真的看看機器代碼;)