为什么我可以在运行时创建和使用此数组?

时间:2017-10-25 15:20:02

标签: c++ arrays

我参与了C ++编码课程,今天我在与课程中的其他人讨论动态内存分配。他在回顾他以前的C ++课程(这是他第一次接受编程),他们会使用这样的东西来构建和使用数组:

#include <iostream>

int main(void) {
    int x;
    std::cin >> x;
    int arr[x];

    for (int i = 0; i < x; i++) {
        int k;
        std::cin >> k;
        arr[i] = k;
    }

    for (int i = 0; i < x; i++) {
        std::cout << "The value at arr[" << i << "] is " << arr[i] << std::endl;
    }

    return 0;
}

我编译了这个没有使用g ++接收任何编译错误,当我运行它(x的输入很小)时,输出完全符合预期。我将代码更改为C并使用gcc运行它并获得相同的结果。

为什么这样做?我们在编译时不知道数组大小,但是我们没有动态分配任何内存,我们仍然可以无误读/写。我的假设是操作系统会自动为堆栈分配一定数量的内存,我们只是依赖于某些内存尚未使用的事实,但我并不完全满意。如果它是安全的,为什么我们对未知大小的数组使用动态分配?如果它不安全,为什么编译器没有给我一个警告(或者是否需要添加一个特定的标志来查看此警告)?任何洞察这里实际发生的事情都将非常感激。

0 个答案:

没有答案