为什么它会在spoj上显示sigsev错误.. ??

时间:2014-06-17 13:48:53

标签: c runtime-error sigsegv

## Here is the link to the question http://www.spoj.com/problems/SBANK/
## i am getting sigsev error on the spoj.i have used mergesort to sort the account number ##


#include<stdio.h>
#include<string.h>
void merge(int,int,int);
char a[10000][33];

**合并函数以对数组进行排序。由于帐号超过18位,我使用字符串库函数来比较存储在字符串**

中的帐号
 void mergesort(int low,int high)
{   int mid;

if(high>low)
{
     mid=(high+low)/2;
    mergesort(low,mid);
    mergesort(mid+1,high);
    merge(low,mid,high);

}
else
    return;
}
void  merge(int low,int mid,int high)
{
int i=low;
int j=mid+1;
int k=0;

char temp[10000][33];

while(i<=mid&&j<=high)
{
    if(strcmp(a[i],a[j])<0)
    {


        strcpy(temp[k],a[i]);
        i++;

    }

    else
    {
       strcpy(temp[k],a[j]);
        j++;

    }
    k++;
}

while(i<=mid)
{
    strcpy(temp[k],a[i]);
    k++;
    i++;
}

while(j<=high)
{
   strcpy(temp[k],a[j]);
    k++;
    j++;
}
k=0;
    while(low<=high)
        {
            strcpy(a[low],temp[k]);
            low++;
            k++;
        }
}
  

主要驾驶功能

     

在其中一家互联网银行中,每天都有数千项业务正在进行。由于某些客户比其他客户更积极地开展业务,因此一些银行账户在运营清单中多次出现。您的任务是按升序对银行帐号进行排序。如果帐户在列表中出现两次或更多次,请在帐号后面写下重复次数。帐户的格式如下:例如2个控制数字,银行的8位代码,识别所有者的16位数字(以4位数字组成)(在每行的末尾只有一个空格) :   30 10103538 2222 1233 6160 0142

银行是实时机构,他们需要快速解决方案。如果您觉得可以在非常严格的时间限制内迎接挑战,请继续!一个设计良好的快速语言排序算法很可能会成功。

int main()
{

int t;
scanf("%d",&t);
while(t--)
{
    int i,n;
    int ch;
    scanf("%d",&n);
    getchar();



   for(i=0;i<n;i++)
    gets(a[i]);
  printf("\n");

    mergesort(0,n-1);

    int j=1;
    for(i=0;i<n-1;i++)
    {
        if(strcmp(a[i],a[i+1])==0)
        {   j++;
           continue;
        }
        else
            {
        printf("%s %d\n",a[i],j);
        j=1;
        }
    }
     printf("%s %d\n",a[i],j);

}
return 0;

}

[Problem to sort bank accounts number of 26 digit][1]

1 个答案:

答案 0 :(得分:0)

如果字符串长度超过32个字符或者超过10000个字符,则可能有一个固定大小的数组溢出。

在未正确初始化的索引处访问数据也可能导致越界读取。