在终端窗口中未获得任何结果 我刚刚开始用C++编写代码,我使用的是代码块。我的构建日志给了我0个错误和0个警告,但我不知道为什么当我运行它时,它在终端中没有给我任何结果。 终端窗口结果:
返回的进程-1073741571(0xC00000FD)执行时间:1.252秒 按任意键继续 我的代码:在终端窗口中未获得任何结果 我刚刚开始用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>>
#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]引起
whereN=1e6
。不能仅仅因为堆栈溢出而在函数中声明大小相同的数组。“不要使用编译时不知道大小的VLA“这是一个问题或措辞,但在编译时,你永远不知道VLA的大小,这就是它的重要性VLA@idclev463035818对,我的措辞有点混乱。无论如何,我的观点是,你不能在一个函数中声明巨大的数组,因为不管你做什么,它都会崩溃。我没有对你的观点发表评论,只是对VLAs上的那句话没有任何意义sense@idclev463035818离题了,但我必须说,你对我有一个很好的部分。