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

在终端窗口中未获得任何结果 我刚刚开始用C++编写代码,我使用的是代码块。我的构建日志给了我0个错误和0个警告,但我不知道为什么当我运行它时,它在终端中没有给我任何结果。 终端窗口结果:,c++,codeblocks,C++,Codeblocks,返回的进程-1073741571(0xC00000FD)执行时间:1.252秒 按任意键继续 我的代码: #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>>

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

我的代码:

    #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;
}
#包括
#包括
使用名称空间std;
int main(){
int n;
cin>>n;
int a[n];
对于(int i=0;i>a[i];
}
常数int N=功率(10,6);
int-idx[N];
对于(int i=0;i
intn;
标准:cin>>n;
int a[n];
对于(int i=0;i>a[i];
}

这是一种糟糕的做法。不要使用编译时不知道大小的VLA。相反,如果我正确猜测这是一个竞争性编程问题,您可能会知道问题中所述的最大大小。因此,请改为使用以下方法:

intn;
标准:cin>>n;
constexpr int max_size=1000000;
int a[最大尺寸];
对于(int i=0;i>a[i];
}
但是,即使这样做也会使程序崩溃。这只是因为在函数中声明大小相同的数组时会出现堆栈溢出。不过,对于稍小的数组,也可以。只是不要像使用VLA那样使用它们

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

另一个解决方案是将数组
设为全局数组。通过这种方式,您可以将数组的大小增加到远远超过
1e6
。但实际上并不推荐这样做

在上面的代码中,无论数组
a
n
大小是多少(即使它的大小相当小,适合堆栈),当您声明数组
idx[1000000]
时,代码肯定会崩溃。原因是一样的,堆栈溢出


也请使用缩进代码,使用良好的缩进方式。

使用C++时,请坚持C++提供的标题。使用<代码> <代码>过<代码> <代码>。此外,缩进帮助。使用<代码> STD::向量< /代码>代替那些非标准可变长度数组(其大小最有可能是问题的根源)。1)“我的构建日志给了我0个错误和0个警告”,这是判断代码质量的一个很低的标准。2)如果我没记错的话
0xc0000fd
表示“堆栈溢出”。3)
int a[n]编译时不知道代码> N< /代码>是非标准C++。在支持VLAS的编译器中,由于扩展,可能会导致足够大的值,即代码< N>代码>堆栈溢出。。将其设置为全局或使用标准容器。VLA是编译器提供的扩展。不要使用它们。可以确认,无论您在运行时将数组
a
作为大小
n
输入的大小如何,崩溃肯定会由另一个数组
idx[n]引起
where
N=1e6
。不能仅仅因为堆栈溢出而在函数中声明大小相同的数组。“不要使用编译时不知道大小的VLA“这是一个问题或措辞,但在编译时,你永远不知道VLA的大小,这就是它的重要性VLA@idclev463035818对,我的措辞有点混乱。无论如何,我的观点是,你不能在一个函数中声明巨大的数组,因为不管你做什么,它都会崩溃。我没有对你的观点发表评论,只是对VLAs上的那句话没有任何意义sense@idclev463035818离题了,但我必须说,你对我有一个很好的
部分。