c++ - 为什么这个 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;
}
解决方案
尝试动态分配内存。您在该数组中有 1M 的元素,这对于堆栈来说可能有点多。
推荐阅读
- java - Java Spring Batch StoredProcedureItemReader 实现(SYSBASE IQ)
- android - Facebook阻止我的应用程序通过链接android打开
- ios - 归档项目时出现错误“在函数上运行传递‘模块验证程序’..”
- android - 在应用购买中检查 Android Play 商店的标准方法是什么?
- xcode - Xcode10 & openframework IOSno
- json - 使用 Swift 在 Realm 中嵌套数组
- android - Android Studio 倾向于使用错误版本的 Android 支持库,
- php - 使用 json_encode 将 PHP 变量传递给 AJAX 文件的问题
- android - 在支持库 28.0.0 中禁用 BottomNavigationView 的 ShiftNode
- inheritance - AssetRegistry.get 函数未在 Hyperledger Composer 中返回完整对象