为什么在输入n之前声明数组的大小为n,第一次有效,但第二次就不行了?

2023-12-11

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

P.S:我在网上找不到任何相关信息。

这是代码片段

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

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

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

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

你想读n before定义 VLA:

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

请注意,VLA 分配于stack. So if n值足够大,您将由于溢出而出现未定义的行为(=未定义的行为)。因此,最好避免使用 VLA。你可以使用std::vector<int>反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在输入n之前声明数组的大小为n,第一次有效,但第二次就不行了? 的相关文章

随机推荐