在终端窗口中没有结果

问题描述

我刚刚开始使用C ++进行编码,并且正在使用代码块。我的构建日志给了我0错误和0警告,但是我不知道为什么当我运行它时,在终端上没有任何结果。 终端窗口结果:

返回的过程-1073741571(0xC00000FD)执行时间:1.252 s 按任意键继续。

我的代码:

    #include <iostream>
    #include<math.h>
    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 = pow(10,6);
    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;
}

请帮助我找到代码中的错误。

解决方法

此:

int n;
std::cin >> n;

int a [n];

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

是不好的做法。不要使用在编译时不知道其大小的VLA。相反,如果我正确地猜到这是一个竞争编程问题,您可能会知道问题中所述的最大大小。因此,请改用这种方式:

int n;
std::cin >> n;

constexpr int max_size = 1000000;
int a [max_size];

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

但是,即使以这种方式执行操作也会使您的程序崩溃。这完全是由于在函数中声明一个具有该大小的数组时堆栈溢出。但是,对于较小的尺寸,这是可以的。只是不要像使用VLA那样使用VLA。

一种解决方案是使用std::vector之类的标准容器,因为分配是在堆上进行的。请注意,使用std::array也会崩溃,因为分配不在堆上。

另一种解决方案是使数组a为全局数组。这样,您可以将大小增加到1e6以上。不过,不建议这样做。

在上面的代码中,无论数组n的大小a是多少(即使它适合堆栈的大小都很小),当声明数组idx [1000000]。原因是相同的,堆栈溢出。

另外,请发布缩进代码并使用良好的缩进做法。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...