在Code Chef上获取运行时错误(SIGSEGV),无法找出代码中的错误

时间:2014-04-17 18:25:34

标签: c++ sigsegv

我知道之前曾问过这类问题,但相信我,我无法找到解决方法,我知道它的内存参考错误无效,但我似乎无法找到原因。我的代码中的错误。

我刚刚在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;
 }

1 个答案:

答案 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 ,祝您好运