【发布时间】:2020-07-26 02:56:39
【问题描述】:
我一直试图理解以下代码的越界错误,但我无法弄清楚。原来的问题是 https://codeforces.com/contest/148/problem/A 。我不知道为什么我被卡住了,你能告诉我如何避免类似类型的错误。
#include <iostream>
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
int k,l,m,n,d,count=0;
cin>>k>>l>>m>>n>>d;
int arr[d]={0};
for (int i = 0; i < d; ++i){
int k1=k*(i+1); k1--;
int l1=l*(i+1); l1--;
int m1=m*(i+1); m1--;
int n1=n*(i+1); n1--;
if(arr[k1]==0 && k1<d){
arr[k1]=1; count++;
}
if(arr[l1]==0 && l1<d){
arr[l1]=1; count++;
}
if(arr[m1]==0 && m1<d){
arr[m1]=1; count++;
}
if(arr[n1]==0 && n1<d){
arr[n1]=1; count++;
}
}
cout<<count;
return 0;
}
【问题讨论】:
-
if(arr[k1]==0 && k1<d)如果是k1 >= d,那么在您已经越界访问了数组之后再检查是否为时已晚。 -
int arr[d]={0}-- 这不是有效的 C++。使用std::vector<int> arr(d);。 -
@PaulMcKenzie 使用向量
arr(d,0);也报错 -
现在您已更改为矢量,使用
at()而不是[ ]来访问元素。然后它会指出问题发生的位置,因为会抛出std::out_of_range异常。 -
@PaulMcKenzie 我使用了 vector.at() 但错误是我写的条件错误,正如 IgorTandetnik 指出的那样
标签: c++ arrays stl c++14 c++17