please help me to find Bug in my Code (segmentation fault)

Posted by Vikramaditya Battina on Stack Overflow See other posts from Stack Overflow or by Vikramaditya Battina
Published on 2013-10-28T15:20:50Z Indexed on 2013/10/28 15:54 UTC
Read the original article Hit count: 178

i am tring to solve this http://www.spoj.com/problems/LEXISORT/ question it working fine in visual studio compiler and IDEone also but when i running in SPOJ compiler it is getting SEGSIGV error

Here my code goes

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *getString();
void lexisort(char **str,int num);
void countsort(char **str,int i,int num);
int main()
{
    int num_test;
    int num_strings;
    char **str;
    int i,j;
    scanf("%d",&num_test);
    for(i=0;i<num_test;i++)
    {
           scanf("%d",&num_strings);
       str=(char **)malloc(sizeof(char *)*num_strings);
       for(j=0;j<num_strings;j++)
       {
           str[j]=(char *)malloc(sizeof(char)*11);
           scanf("%s",str[j]);
           }
      lexisort(str,num_strings);
       for(j=0;j<num_strings;j++)
       {
           printf("%s\n",str[j]);
           free(str[j]);
       }
       free(str);
    }
    return 0;
}


void lexisort(char **str,int num)
{
   int i;
   for(i=9;i>=0;i--)
   {
       countsort(str,i,num);
   }
}
void countsort(char **str,int i,int num)
{

    int buff[52]={0,0},k,x;
    char **temp=(char **)malloc(sizeof(char *)*num);
    for(k=0;k<52;k++)
    {
       buff[k]=0;
    }
    for(k=0;k<num;k++)
    {
        if(str[k][i]>='A' && str[k][i]<='Z')
        {
            buff[(str[k][i]-'A')]++;
        }
        else
        {
            buff[26+(str[k][i]-'a')]++;
        }
    }
    for(k=1;k<52;k++)
    {
        buff[k]=buff[k]+buff[k-1];
    }
    for(k=num-1;k>=0;k--)
    {
        if(str[k][i]>='A' && str[k][i]<='Z')
        {

            x=buff[(str[k][i]-'A')];
            temp[x-1]=str[k];
            buff[(str[k][i]-'A')]--;
        }
        else
        {
            x=buff[26+(str[k][i]-'a')];
               temp[x-1]=str[k];
            buff[26+(str[k][i]-'a')]--;
                }
    }
    for(k=0;k<num;k++)
    {
       str[k]=temp[k];
    }
    free(temp);
}

© Stack Overflow or respective owner

Related posts about c

    Related posts about coding-style