繁体   English   中英

Qt C++ 类变量未初始化

[英]Qt C++ class variable uninitialized

平台

操作系统 -> ubuntu 15.10 x64 IDE -> qt creator cxx -> clang x64

未初始化的变量“ abcdefgh ”,但在运行“ beg ”时,值始终为零; 为什么 ?

代码

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;
}

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

每个函数调用都会操作堆栈,因此可能会发生一些零是之前调用的某些函数的“剩余部分”。 如果您认为您的程序之前没有调用任何函数,则最好检查机器代码。 有很多事情发生,你没想到......

您可以在此处阅读有关堆和堆栈的更多信息,或者只是在 Internet 上搜索。 对于这样的问题,您也应该真正研究一下机器代码;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM