Runtime Error(SIGSEGV) in count of maximum

#include<stdio.h>
int main(void)
{
int i,t,m,max,j,N;
scanf("%d",&t);
while(t–)
{ int b[1000]={0};
j=0;
max=0;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&m);
b[m]+=1;
}

  for(i=0;i<=1001;i++)
  {
      //printf("%d\t",b[i]);
      if(max<b[i])
      {

          max=b[i];
          j=i;

      }
  }
          printf("%d %d\n",j,max);

}
return 0;
}
You may also view the solution at the link below:
http://www.codechef.com/viewsolution/6068287
Thanx for your support

Your approach is correct (there are other solutions strategies also ). But you are not taking care of the constraints values.

1 <= T <= 100, 1 <= N <= 100

and for all i in [1…N] : 1 <= A[i] <= 10000

The values of T and N are handled correctly but A[i] can have maximum value of 10000.

Your array b is suffering from array index out of bounds runtime error for i >=1000, you need to make the below mentioned adjustments for all i in [1…N] : 1 <= A[i] <= 10000.

#include"stdio.h"
int main(void) {

int i,t,m,max,j,N;
scanf("%d",&t);
while(t--)
{
    int b[10001]={0};   //change here, increase the size of the array
    j=0;
    max=0;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&m);
        b[m]+=1;
    }
    
    for(i=0;i<10001;i++)    //change here, as the size is increased you need to adjust the loop accordingly
    {
      //printf("%d\t",b[i]);
        if(max<b[i])
        {
            max=b[i];
            j=i;
        }
    }
    printf("%d %d\n",j,b[j]);
}
return 0; 

}

Your approach with these modification is accepted, see it here.

P.S. : Your approach can be modified to require less memory ( you are allocating array size of 10001).

Thanks.
A silly mistake of mine!!