2017-08-13 31 views
0

这是问题陈述:codechef problem 我的代码是:该程序在codechef上显示sisegv。分割错误。但我不能找到任何合适的方法来消除它

#include<stdio.h> 
    #include<string.h> 
    char p[100]; 
    char n[100][100]; 
    int main() 
    { 
     int a,c=0; 
     int x,y,z=0; 
     scanf("%d",&a); 
     while(a--) 
     { 
      int mid,l,i,j,f; 
      scanf("%s",p); 
      l=strlen(p); 
      mid=l/2; 
      if(l%2==0) 
      { 
       f=0; 
       for(i=0,j=l-1;i<=mid,j>mid;i++,j--) 
       { 
        if(p[i]!=p[j]) 
        { 
         f=1; 
         break; 
        } 
       } 
       if(f==0) 
       { 
        strcpy(n[c],p); 
        c++; 
       } 
      } 
      else 
      { 
       f=0; 
       for(i=0,j=l-1;i<mid,j>mid;i++,j--) 
       { 
        if(p[i]!=p[j]) 
        { 
         f=1; 
         break; 
        } 
       } 
       if(f==0) 
       { 
        strcpy(n[c],p); 
        c++; 
       } 
      } 

     } 
     for(x=0;x<=c;x++) 
     { 
      for(y=x+1;y<=c;y++) 
      { 
       if(n[x][0]==n[y][0]) 
       z++; 
      } 
     } 
     printf("%d",z); 
    } 

输出工作正常。但我不明白为什么每次提交我的代码时出现分段错误。我甚至试图减少我的数组大小,同时也减少了二维数组的大小。没有任何工作。似乎我正在访问数组越界,但我无法找到它。任何人都可以提出替代方法来做到这一点?

预先感谢您。

+0

是的。它在本地编译器上工作正常。 –

回答

0

看来我正在访问数组越界,但我找不到它。

好了,你没有做任何边界检查,所以这是微不足道的构建输入你的代码确实访问数组越界。例如,下面的语句:

scanf("%s",p); 

会溢出p[100]如果输入线超过99个字符。

同样,给你的程序101输入字符串将溢出n[100][100]阵列。

知道当你“提交你的代码”时,你的程序正在测试什么?

+0

约束条件为: 字符串数<= 10^6 和字符串> = 1 –

+1

@SayanDhar“字符串数<= 10^6” - 好的,您的程序不能处理超过100个字符,这样可能会成为你的问题吧。 –

相关问题