不同内存位置中的 C++ 默认数组值

标签 c++ arrays memory initialization undefined-behavior

它与上述问题不重复,因为未涵盖静态差异并且答案有错误。

这是一个关于进程内内存组织的基本分解问题,更具体地说,是关于默认数组值。

在下面的代码中:
arr1 静态分配在机器指令附近的内存块中,并在某个时刻默认初始化为 0
arr2 应该在创建函数框架时在堆栈上分配,它永远不会默认初始化
arr3arr1 相同 [?]
arr4arr2 相同 [?]
arr5 ...除了上述两个问题之外,现在我的主要问题是类内的 static 变量与 static 有何不同函数内的变量?我无法访问未初始化的 arr5 元素。哪些情况下我可以?

int arr1[5];    

void func() {   
    int arr2[5];        printf("%d\n", arr2[0]);          // [2]
    static int arr3[5]; printf("%d\n", arr3[0]);          // [3]
}

class MyClass {
public:
    int arr4[5];
    static int arr5[5];
};

int main() 
{   
    printf("%d\n", arr1[0]);                // [1]

    func();

    MyClass obj;
    printf("%d\n", obj.arr4[0]);            // [4]
    //printf("%d\n", obj.arr5[0]);          // [5]


    std::cin.get();
}

输出:

0
-858993460
0
-858993460

最佳答案

根据this article arr5 已声明但未定义。

添加

int MyClass::arr5[5];

声明class MyClass之后。比你可以获得 obj.arr5[0]

class MyClass {
public:
    int arr4[5];
    static int arr5[5];
};

int MyClass::arr5[5];

关于不同内存位置中的 C++ 默认数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130752/

相关文章:

c++ - 编译器是否优化内联函数的局部变量

c++ - 在 C++ 中编写函数

c - GDB 调试器 : char array type examine and print command

c++ - 再次不稳定 : necessary to prevent optimization?

C语言逐字节复制指针的内容无限循环

c++ - Arduino 中的预定义数组

c++ - 你能在 C++ 中有一个数组 vector 吗?

arrays - 类数组中的方法

Java,如果数组中 'x' 紧邻 'y',则返回 true

objective-c - 在 Swift 中删除 NSData 内容