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);
}