我知道之前曾问过这类问题,但相信我,我无法找到解决方法,我知道它的内存参考错误无效,但我似乎无法找到原因。我的代码中的错误。
我刚刚在CodeChef上尝试了我的第一个问题,那就是' Alien Chefs' http://www.codechef.com/problems/DOWNLOAD我的提交就是这个,这让Dev C ++没有错误编译器,但弹出运行时错误(SIGSEGV)
这是我的代码:
#include<iostream>
using namespace std;
int main()
{
int i,j,ctr,nr,toa,k,ng,q[100],p[100],na,l,sum[100],rc[100]={0};
cin>>nr;
for(i=0;i<nr;i++)
{
cin>>p[i]>>q[i];
}
cin>>ng;
for(i=0;i<ng;i++)
{
cin>>na;
ctr=0;
fill_n(rc,100,0);
for(j=0;j<na;j++)
{
cin>>toa;
for(k=0;k<nr;k++)
{if(p[k]<=toa && q[k]>=toa)
rc[k]=1;
}
}
for(l=0;l<nr;l++)
{ if(rc[l]==1)
ctr++;
}
sum[i]=ctr;
}
for(i=0;i<ng;i++)
cout<<"\n"<<sum[i];
return 0;
}
答案 0 :(得分:3)
您的代码存在许多问题,请注意,N的值可以大到10 ^ 5
1≤N≤100000(10 ^ 5)
1≤Q≤5000(5·10 ^ 3)
1≤K≤20
1≤Si,Ei,t≤1000000000(10 ^ 9)
Si&lt; EI
并且您只为阵列分配了100个元素
q [100],p [100],na,l,sum [100],rc [100] = {0};
,因此这会导致
出现异常异常for(i=0;i<nr;i++)
{
cin>>p[i]>>q[i];//What will happen for i >= 100 ?
}
它会为您提供 SISEGV (分段错误),即您尝试访问未分配/无权访问的内存。
您可能想重新考虑您的算法实现,请查看Range Tree ,祝您好运