Qt C++类变量未初始化

Qt C++ class variable uninitialized

本文关键字:初始化 类变量 C++ Qt      更新时间:2023-10-16

平台

操作系统->ubuntu 15.10 x64IDE->qt创建者cxx->clang x64

未初始化的变量"a b c d e f g h",但当运行"b e g"时,值始终为零;为什么?

代码

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%08Xn", a, b, c, d);
        printf("value show e = 0x%08X , f = 0x%08X , g = 0x%08X , h = 0x%08Xn", e, f, g, h);
        printf("mapid show e = 0x%08X , f = 0x%08X , g = 0x%08X , h = 0x%08Xn", &e, &f, &g, &h);
    }
private:
    int a;
    int b;
    int c;
    int d;
};

int main()
{
    A aaa;
    aaa.show();
    int a;
    printf("0x%08xn", a);
    while(1);
    return 0;
}

您使用的是未初始化的变量。在变量中找到的"随机垃圾"取决于堆栈中的数据。堆栈上的数据或多或少是随机的
你会发现有些变量是零,因为堆栈在那个地方是零。堆栈为零的原因可能是随机的,但也可能取决于您的程序。

每个函数调用都会操作堆栈,因此可能会发生这样的情况,即一些零是之前调用的一些函数的"剩余部分"。如果你认为你的程序以前没有调用过任何函数,你最好检查一下机器代码。有很多事情正在发生,在你意想不到的地方…

你可以在这里阅读更多关于堆和堆栈的信息,也可以在互联网上搜索。对于这样的问题,你也应该仔细研究机器代码;)