最长连续自然数个数,怎么输出最长的那个个数,还有这个程序不知道哪个地方错了

#include
int main()
{
int n,t,i,j=0,k,max=0;
scanf("%d",&n);
scanf("%d",&t);
for(i=1;i
{
scanf("%d",&k);
if(k==t+1)
{
j++;
t=k;

    }
    
    else
    {
        j=0;
        continue;
    }

    if(j>max)
max=j;    
}


printf("%d",max);
return 0;

}


#include <iostream>
#include <cstring>
 
using namespace std;
 
int Max_Length(int a[],int max,int n);//函数声明,计算最大的连续自然数长度
 
int main()
{
 
    int a[]={100,2,3,1,4,8,5,9,10,22,7,23,54,0};     
    int max=0;//保存数组中最大元素值
    int n=(sizeof(a)/sizeof(int));//计算数组长度
    for(int i=0;i<n;i++)
    {
        if(a[i]>max)
            max=a[i];
    
    }
    int Number;
    Number=Max_Length(a,max,n);
 
    printf("%d\n",Number);
 
    return 0;
}
 
int Max_Length(int a[],int max,int n)
{
    //不能根据max建立数组,因为建立数组的时候,
    //元素个数必须是常量。我想到了动态分配内存
    int* b=NULL;
    b=(int*)malloc((max+1)*sizeof(int));
    
    //memset是按字节设置的,可以全0,可以全-1,设成其他的值会有影响,如果int是4字节的
    //32位全0还是0,而如果设置-1一样的道理,每一位都是1,32位全1,最终还是代表-1,设置成其他的就容易出错。
    //主要因为memset是按字节设置值的。
 
        memset(b,-1,(max+1)*(sizeof(int)));    
 
 
    for(int i=0;i<n;i++)
    {
        b[a[i]]=a[i];
    
    }
    int MaxLength=0;
    int tmp=0;
 
    for(i=0;i<=max;i++)
    {    
    
        if(b[i]!=-1)
        {
            tmp+=1;
            
        }
        else 
        {
            tmp=0;
            
        }
        if(tmp>MaxLength)
        {
            MaxLength=tmp;
            
        }
    }
    free(b);//释放指针
    return MaxLength;
 
}