为什么运行会报错呢
#include <bits/stdc++.h>using namespace std;
const int N=1e5;
int a,b;
void insert(int x1,int y1,int x2,int y2,int c)
{
b+=c;
b-=c;
b-=c;
b+=c;
}
int main()
{
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a=0;
}
}
while(q--)
{
int x1,y1,x2,y2,c=1;
cin>>x1>>y1>>x2>>y2;
insert(x1,y1,x2,y2,c);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
b+=b+b-b;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<b<<" ";
}
puts(" ");
}
} 这段代码的问题在于数组越界访问。在函数 insert 中,使用 b 和 b 时,可能会访问到 b 数组的越界位置。这是因为数组 b 的大小是 N*N ,而在 insert 函数中传入的参数 x2 和 y2 的范围是 1 到 n ,当 x2+1 或 y2+1 超过 N 时,就会出现越界访问的问题。
解决这个问题的方法是,将数组 b 的大小改为 (N+1)*(N+1) ,并在循环中将 b 数组的下标从 1 到 n 的部分进行计算。这样就能够避免越界访问的问题。
修改后的代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int a, b;
void insert(int x1, int y1, int x2, int y2, int c)
{
b += c;
b -= c;
b -= c;
b += c;
}
int main()
{
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
a[ i] = 0;
}
}
while (q--)
{
int x1, y1, x2, y2, c = 1;
cin >> x1 >> y1 >> x2 >> y2;
insert(x1, y1, x2, y2, c);
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
b[ i] += b + b[ i] - b;
cout << b[ i] << " ";
}
puts(" ");
}
}
这样修改后,就能够避免越界访问的问题。
页:
[1]