首页 > 解决方案 > 为什么这个 C++ 程序会崩溃?

问题描述

我不知道为什么这个程序会崩溃?这是我正在处理的代码。谢谢。

也有人说那int a[n];是 VLA,这在 C++ 中是不合法的……但是我在其他程序中使用了相同的语法并且它已经奏效了。

#include<iostream>
#include<climits>

using namespace std;

int main()
{
    int n;
    cin>>n;

    int a[n];
    for(int i= 0; i<n; i++)
    {
        cin>>a[i];
    }

    const int N = 1e6 + 2;
    int idx[N];
    for(int i = 0; i<N; i++)
    {
        idx[i] = -1;
    }
    int minidx = INT_MAX;
 
    for(int i = 0; i<n; i++)
    {
        if (idx[a[i]] != -1)
        {
            minidx = min(minidx, idx[a[i]]);
        }
        else
        {
            idx[a[i]] = i;
        }
        
    }
    if (minidx == INT_MAX)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        cout<<minidx + 1<<endl;
    }
    
    return 0;
}

标签: c++arrays

解决方案


尝试动态分配内存。您在该数组中有 1M 的元素,这对于堆栈来说可能有点多。


推荐阅读