首页 > 解决方案 > 为什么在输入 n 之前将数组的大小声明为 n,第一次有效,第二次无效?

问题描述

我正在解决一个问题,在输入 n 的值之前,我将数组的大小声明为 n,它适用于第一个测试用例,但不适用于第二个测试用例。为什么?

PS:我在网上找不到任何相关信息。

这是代码片段

    int n,arr[n];
    cin>>n;

标签: c++arrays

解决方案


int n,arr[n];
cin>>n;

这试图定义一个 VLA(可变长度数组)。但是,VLA 不是 C++ 的一部分。

这可能支持作为编译器的扩展(例如g++支持作为扩展)。在这种情况下,你仍然有问题。定义数组时,n未初始化。所以它会触发未定义的行为。

在定义 VLAn 之前,您需要阅读:

int n;
std::cin >> n;
int arr[n];

请注意 VLA 是在stack上分配的。因此,如果n值足够大,由于溢出(= 未定义的行为),您将有未定义的行为。因此,最好避免使用 VLA。你可以std::vector<int>改用。


推荐阅读